Здравствуйте!
суть задачи состоит в следующем: даны координаты(х,у) трех вершин треугольника, и дана четвертая координата точки. требуется определить принадлежит ли точка треугольнику или нет.
у меня в принципе задача решена , но только для всех треугольиков кроме прямоугольных. Т.к. я действовал по следующему алгоритму решения данной задачи: я находил уравнения трех прямых которые образуют треугольник, т.е. находил угол наклона(к) к=(у1-у2)/(х1-х2) и так далее... вот здесь то и скрывается подвох... если задать координаты прямоугольного треугольника, то получается деление на ноль... вот я и не могу от этого избавиться. подскажите, как действовать?
Подробнее напишите почему деление на ноль.
в прямоугольном треугольнике один из катетов параллелен оси У, то есть координата Х одинакова. и при нахождении угла наклона прямой к=у1-у2/х1-х2 знаменатель обращается в ноль. и это будет с любым треугольником у которого одна из сторон будет параллельна оси ординат.
ищите тогда по-другому, а именно так: если идет деление на ноль, то говорите что угол pi/2 и все то есть просто сделайте проверку.
спасибо, вроде бы представляю как условия будут выглядеть...
а вот еще вопросик: у меня программа работает если только точки вводить по возрастанию аргумента. а как заставить программу чтоб можно было координаты вводить в произвольном порядке?
Вводите в произвольном порядке а потом упорядочивайте по возрастанию
об этом я думал, но как потом нужному аргументу подставить нужное значение ординаты? в этом вопрос. есть вариант ставить условия на Х, чтоб он был между двумя другими. допустим: х2 находится между х1 и х3 тогда находим все что нам нужно. и так с каждым аргументом.
А зачем у Вас вообще в алгоритме нужно вводить координаты упорядочено? Есть стандартные алгоритмы на определение принадлежности точки многоугольнику - хотя бы даже на Википедии.
Например так.
Соеденим нашу точку со всеми вершинами теугольника, и посчитаем сумму площадей получившихся маленьких треугольников (например по формуле герона). Дальше сравниваем её с площадью исходного треугольника. Если они совпадают, то точка внутри ли на границе треугольника. если больше, то точка снаружи. Если площади совпадают, то хорошо бы проверить, а не лежит ли наша точка в какой-нибудь из вершин или на границе. Реальзовать это просот: три ифа - проверка на совпадение данной точки с вершинами, и ещё три ифа : проверка того, что все площади мелких треугольников не нулевые. (Если какая-то из них нулевая, то точка на соответствующей границе). Вот и всё.
если точка находится в какой либо вершине то это сразу видно при вводе начальных данных (я над этим задумывался) а так же даже если у нас точка находится на какой либо границе треугольника то это существенно не влияет на ход программы. т.к. мы просто заранее ставим лишние условие чтобы программа не выполняла лишнего действия...
а вот интерес состоит в том что если мы ставим конечно условие на равенство площади треугольника и суммы трех других площадей то при равных площадях нам программа выдаст отказ на принадлежность точки треугольнику
а для того что бы написать функцию пересечения отрезков надо составить уравнения этих прямых. . . и это опять же сводится к угловым коэффициентам прямых и к возможному делению на ноль если мы k находим по формуле у1-у2/х1-х2
есть вариант представлению уравнения прямой вида ах+bу+с=0 тогда в этом случае деление на ноль отсутствует
спасибо, конечно, за активную помощь, но эта программа написана мною уже недели полторы назад примерно
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)