#java #arraylist
#java #arraylist
Вопрос:
Я хочу заштриховать многоугольник линиями, которые нарисованы под определенным углом. Я уже нашел все точки с помощью алгоритма сканирования многоугольника в массиве ArrayList из ArrayList точек. Это означает, что в ArrayList<ArrayList<Point>>
есть ArrayList<Point>
которые имеют все точки для многоугольника с одним значением y. Например, эти 2 точки для прямоугольника (2,2)
и (5,2)
. Таким образом, внешний ArrayList содержит все горизонтальные точки, с помощью которых можно рисовать drawLine()
. Теперь я должен вычислить конечные точки x2 и y2 для drawLine(x1,y1,x2,y2)
.
Есть ли какая-либо возможность получить правильные точки многоугольника для x2 и y2?
Комментарии:
1. Итак, вы пытаетесь найти пересечение вашей линии со стороной многоугольника?
2. да, это то, что я хочу сделать.
Ответ №1:
Попытка добиться этого вручную довольно сложна.
Рассмотрите возможность установки контура обрезки в Graphics2D с использованием вашего полигона в качестве фигуры. Затем из точек на базовой линии ограничивающего прямоугольника вашего многоугольника нарисуйте линии затенения достаточной длины, чтобы они превышали параллельную линию ограничивающего прямоугольника.
Ответ №2:
Вы можете посмотреть в Википедии, как найти пересечения линий.
Единственная трудность заключается в том, чтобы убедиться, что пересечение действительно находится на правой стороне отрезка линии. Один из вариантов — просто проверить, что координаты пересечения находятся на границе прямоугольника, образованного двумя конечными точками стороны многоугольника. Вы можете легко сделать это, просто сравнив координаты.
Как только вы найдете пересечение для этой линии с обеих сторон многоугольника, вы можете использовать g.drawLine()
для их соединения.
Наивное и простое решение для нахождения двух сторон многоугольника (при условии, что он выпуклый) состоит в том, чтобы перебирать все стороны, пока не найдете две, которые пересекаются в границах стороны. Затем просто соедините эти два пересечения.