﻿/*! \page ExCrossLines  Алгоритм пересечения различных прямых
 
  \section sec1 Пишем алгоритм
  Функция должна принимать две прямых (geom.Line) и возвращать точку (geom.Point)
  или null, если прямые параллельны.
  
  Разместим статическую функцию в классе geom.Algorithms
  
  Для программирования удобно использовать функцию  geom.Algorithms#det (double a, double b, double c, double d)
  \code
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);
}
  \endcode
  При работе с вещественными числами удобно использовать функции класса geom.Accur
  
  \section sec2 Пишем команду
  Для работы функции нужно получить выделенные линии из контейнера (их должно быть ровно две), запустить алгоритм 
  и добавить возвращенную точку в контейнер.
  
  Разместим статическую функцию в классе control.Commands
 
  \code
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!");
}	
  \endcode
  
  В коде вызывется функция control.Message#out(String text), которая выводит сообщение в диалоговом окне или на консоль, 
  в зависимости от настроек.
  
  \section sec3 Добавляем кнопку на Панель управления
  Для добавления кнопки на панель управления достаточно в конструктор класса control.CommandBox добавить строку
  
  \code
  this.add(new CommandButton("Cross Lines", "crossLines", gAllObjects));
  \endcode
  
  В этом коде можно поменять надпись на кнопке
  
  \section sec4 Тестируем алгоритм
  После запуска программы появляется кнопка. Для проверки работы нужно построить две прямые. 
  (Выделить по две точки и нажать кнопку построения линии) 
  
  После этого нажать на добавленную кнопку - должна появиться новая точка.
  
*/
