GeomVis  0.1
Набор классов Java для визуализации результатов работы геометрических алгоритмов
Алгоритм пересечения различных прямых

Пишем алгоритм

Функция должна принимать две прямых (geom.Line) и возвращать точку (geom.Point) или null, если прямые параллельны.

Разместим статическую функцию в классе geom.Algorithms

Для программирования удобно использовать функцию geom.Algorithms::det (double a, double b, double c, double d)

public static Point cross(Line m, Line n)
{
double k = det (m.a, m.b, n.a, n.b);
if (Math.abs (k) < Accur.eps)
return null;
return new Point (-det (m.c, m.b, n.c, n.b) / k,
-det (m.a, m.c, n.a, n.c) / k);
}

При работе с вещественными числами удобно использовать функции класса geom.Accur

Пишем команду

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

Разместим статическую функцию в классе control.Commands

public static void crossLines(GeomContainer gObjects)
{
GeomContainer lines = gObjects.getSelectedObjects();
lines = lines.getObjectsTypeOf(Line.class);
if (lines.size() != 2)
{
Message.out("You have to select exactly two LINES");
return;
}
Line a[]= new Line[2];
points.toArray(a);
Point p = Algorithms.cross(a[0], a[1]);
if (p != null) gObjects.add(p);
else Message.out("There are no cross points!");
}

В коде вызывется функция control.Message::out(String text), которая выводит сообщение в диалоговом окне или на консоль, в зависимости от настроек.

Добавляем кнопку на Панель управления

Для добавления кнопки на панель управления достаточно в конструктор класса control.CommandBox добавить строку

this.add(new CommandButton("Cross Lines", "crossLines", gAllObjects));

В этом коде можно поменять надпись на кнопке

Тестируем алгоритм

После запуска программы появляется кнопка. Для проверки работы нужно построить две прямые. (Выделить по две точки и нажать кнопку построения линии)

После этого нажать на добавленную кнопку - должна появиться новая точка.