Spec-Zone .ru
спецификации, руководства, описания, API
След: 2-D Графика
Урок: Усовершенствованные Темы в Java2D
Построение Сложных Форм от Примитивов Геометрии
Домашняя страница > 2-D Графика > Усовершенствованные Темы в Java2D

Построение Сложных Форм от Примитивов Геометрии

Конструктивная геометрия области (CAG) является процессом создания новых геометрических форм, выполняя логические операции на существующих. В Java 2D™ API Area class реализует Shape взаимодействуйте через интерфейс и поддерживает следующие логические операции.

Схема Венна, показывая Объединение Объединение Схема Венна, показывая Вычитание Вычитание
Схема Венна, показывая Пересечение Пересечение Схема Венна, показывающая Монопольный - или работа Монопольный - или (XOR)

Пример: области

В этом примере Area объекты создают форму груши из нескольких эллипсов.


Отметьте:  

Если Вы не видите, что апплет работает, Вы должны установить выпуск 6 (или позже) Java Комплект разработчика SE (JDK).


Pear.java содержит полный код для этого апплета.

Листы каждый создаются, выполняя пересечение на двух накладывающихся кругах.

leaf = new Ellipse2D.Double();
...
leaf1 = new Area(leaf);
leaf2 = new Area(leaf);
...
leaf.setFrame(ew-16, eh-29, 15.0, 15.0);
leaf1 = new Area(leaf);
leaf.setFrame(ew-14, eh-47, 30.0, 30.0);
leaf2 = new Area(leaf);
leaf1.intersect(leaf2);
g2.fill(leaf1);
...
leaf.setFrame(ew+1, eh-29, 15.0, 15.0);
leaf1 = new Area(leaf);
leaf2.intersect(leaf1);
g2.fill(leaf2);

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

stem = new Ellipse2D.Double();
...
stem.setFrame(ew, eh-42, 40.0, 40.0);
st1 = new Area(stem);
stem.setFrame(ew+3, eh-47, 50.0, 50.0);
st2 = new Area(stem);
st1.subtract(st2);
g2.fill(st1);

Тело груши создается, выполняя операцию объединения на круге и овале.

circle = new Ellipse2D.Double();
oval = new Ellipse2D.Double();
circ = new Area(circle);
ov = new Area(oval);
...
circle.setFrame(ew-25, eh, 50.0, 50.0);
oval.setFrame(ew-19, eh-20, 40.0, 70.0);
circ = new Area(circle);
ov = new Area(oval);
circ.add(ov);
g2.fill(circ);

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Управление Качеством Рендеринга
Следующая страница: Поддержка Взаимодействия с пользователем