Отправлен: 17.06.2005, 13:41
Вопрос задал: ab5ent (статус: Посетитель)
Всего ответов отправлено: 1
Отвечает: Ayl
Здравствуйте, ab5ent!
Ну и в чем проблема?
Определить, находится ли точка внутри треугольника, можно несколькими способами (везде треугольник будет обозначаться ABC, проверяемая точка - M):
1. Площадь треугольника ABC равна сумме площадей треугольников ABM, ACM и BCM. Решение строго математическое, но для компа, ИМХО, не годится, т.к. возможны проблемы с округлением. Простая формула для определения площади треугольника по координатам вершин выглядит так: S = 1/2 * [a, b], где a и b - вектора смежных сторон из общей точки, [a, b] - векторное произведение векторов a и b. Для треугольника ABC с координатами ((Xa, Ya), (Xb, Yb), (Xc, Yc)) площадь определяется так: S = 0.5 * ((Xb-Xa)*(Yc-Ya) - (Xc-Xa)*(Yb-Ya)).
2. Для точки M внутри треугольника ABC сумма углов при вершине M треугольников ABM, ACM и BCM равна 360 градусов (2*пи). Косинус угла определяется как скалярное произведение векторов, исходящих из этой точки, разделенное на произведение длин этих векторов. Способ не очень хороший, т.к. помимо округлений требует большого количества вычислений.
3. Функция Classify в приложении определяет положение заданной точки относительно заданного отрезка (вектора). Вектор разделяет плоскость на 7 непересекающихся областей (см. http://www.kamlit.ru/docs/aloritms/algolist.manual.ru/maths/geom/datastruct.php.htm), и данная функция сообщает, какой из этих областей принадлежит точка.
Функция основана на свойствах векторного произведения векторов.
Используя данную функцию можно определить принадлежность точки треугольнику с помощью 3-х проверок (см. функцию PointInTriangle в приложении).
Третий фрагмент кода в приложении - каркас твоей программы.
Приложение:
--------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 17.06.2005, 16:27 Оценка за ответ: 5