Java - заполнение перекрывающегося многоугольника - PullRequest
1 голос
/ 16 октября 2010

Я пытаюсь нарисовать 5-звездную звезду в AWT. Каждая точка в двумерной сетке находится на расстоянии 72 градуса - поэтому я подумал, что можно нарисовать многоугольник, используя только 5 точек, упорядочив точки на 144 градуса, так что многоугольник получает точки в порядке 1,3,5,2,4

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

Если посмотреть, это как-то связано с четно-нечетным правилом, согласно которому пересекающиеся точки не будут заполнены.

Мне нужно, чтобы моя звезда была нарисована динамически и с использованием определенной формы, описанной (для масштабирования и тому подобного). Если я вручную нанесу точки, где они пересекаются, я получу человеческую ошибку в форме моей звезды.

Есть ли способ просто отключить эту функцию или потерпеть неудачу, есть ли способ заставить многоугольник вернуть массив x [] и y [], где линии пересекаются, чтобы я мог просто нарисовать еще одну внутри него?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 октября 2010

Установите 10-точечную Polygon в декартовых координатах, как предложено relet и как показано в этом примере . Обратите внимание, как система координат центрируется на начале координат для удобства вращения, масштабирования и перемещения. Поскольку Polygon реализует интерфейс Shape, можно применять метод createTransformedShape() для AffineTransform. Более продвинутая библиотека форм может быть найдена здесь .

Есть ли способ заставить полигон возвращать массив x[] и y[] там, где пересекаются линии?

Хотя обычно это не нужно, вы можете проверить координаты компонента, используя Shape's PathIterator. Мне показалось полезным изучить координаты до и после вызова createTransformedShape().

0 голосов
/ 16 октября 2010

Нарисуйте его с десятью точками, на расстоянии 36 градусов, с двумя переменными радиусами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...