Java — рисование контура динамической формы

Я хочу создать динамический контур для Shape (AWT), добавляя объекты (с функциями рисования) в соответствующие позиции на экране по периметру фигуры. Я хочу примерно равное расстояние между каждым объектом. (Альтернативный подход к тому же эффекту подойдет.)

Как я могу получить местоположения для этих объектов? Я знаю, что у фигур есть итератор пути, но я понятия не имею, как его использовать.


person Perry Monschau    schedule 20.05.2012    source источник
comment
...в чем вопрос?   -  person John3136    schedule 21.05.2012
comment
Как я могу получить местоположения для этих объектов? Я знаю, что у фигур есть итератор пути, но я понятия не имею, как его использовать.   -  person Perry Monschau    schedule 21.05.2012
comment
Если бы для формирования треугольной формы были добавлены 3 точки, в итераторе пути были бы возвращены только эти 3 точки.   -  person Andrew Thompson    schedule 21.05.2012
comment
А что за круг? Сколько очков будет возвращено тогда? 2? В таком случае, как бы я тогда создал 20 равномерно расположенных объектов по его периметру? Это то, что я после здесь.   -  person Perry Monschau    schedule 21.05.2012


Ответы (2)


Вы можете взглянуть на библиотеку, подобную описанной в Редактор фигурных диаграмм.

Если вы хотите поэкспериментировать, GraphPanel – это простая программа для рисования объектов с , цветные узлы, соединенные ребрами. Если бы узлы были немного меньше, они были бы перемещаемыми точками на Shape, которые можно повторять, как показано здесь для Polygon .

Приложение: Мне нужно примерно одинаковое расстояние между всеми объектами.

class Node предоставляет ряд статических методов, которые работают с List<Node>, такими как selected. Существующие реализации служат, например, для перевода или изменения размера нескольких выделений как единого целого. Аналогично могут быть реализованы функции для Align и Distribute. Я бы посмотрел на LayoutManger в качестве примера для последнего.

person trashgod    schedule 21.05.2012
comment
@AndrewThompson: Хороший вопрос; Я упустил из виду этот аспект вопроса. Подробнее выше. - person trashgod; 21.05.2012
comment
Я не понимаю, как это помогает. Рассматриваемая проблема заключается в нахождении равномерно распределенного количества точек по периметру фигуры. Возможно, я не очень ясно выразился. - person Perry Monschau; 21.05.2012
comment
Это будет зависеть от Shape; вот пример, основанный на параметрическом уравнении окружности. Его можно обобщить, используя параметрическое уравнение для эллипса. - person trashgod; 21.05.2012
comment
Значит, нет простого способа получить равномерно распределенные точки на любой фигуре? - person Perry Monschau; 22.05.2012

Используйте FlatteningPathIterator, чтобы получить очки за Shape's путь.

Также вы можете использовать метод BasicStroke's

public Shape createStrokedShape(Shape s)

чтобы получить контур Shape's желаемой ширины.

person StanislavL    schedule 21.05.2012