PathIterator для java.awt.Rectangle всегда дает (0,0)

В моем коде я создаю экземпляр java.awt.Rectangleс углом и длиной и шириной. Затем я применяю аффинное преобразование вращения(at), чтобы повернуть его на определенный угол.

Затем я выбираю PathIterator прямоугольника и повторяю геометрию следующим образом:

PathIterator i = rectangle.getPathIterator(at);
while (!i.isDone()) {
    double[] xy = new double[2];
    i.currentSegment(xy);
}

Хотя я ожидаю, что 4 балла (или 5 как первый и последний могут быть одинаковыми), я получаю 6 баллов. И еще удивительнее, что последняя точка всегда (0,0). (0,0) не является частью геометрии прямоугольника, но я все еще получаю это всегда. В чем причина такого поведения?

1 ответ

Решение

Проверьте возвращаемое значение currentSegment, Последняя "точка" будет иметь тип PathIterator.SEG_CLOSE, который задокументирован как:

Константа типа сегмента, которая указывает, что предыдущий подпуть должен быть закрыт путем добавления линейного сегмента обратно к точке, соответствующей самому последнему SEG_MOVETO.

Данные точек, связанные с этим типом, являются неявными (т. Е. Первая и последняя точки в пути). Ничего не записывается в массив, когда currentSegment возвращается SEG_MOVETO; точка (0, 0), которую вы видите при последнем вызове, является значением, с которым массив был инициализирован при его создании.

Другие вопросы по тегам