Здравствуйте, гость ( Вход | Регистрация )
| dimka37 |
18.12.2010, 12:42
Сообщение
#1
|
|
Школьник ![]() Группа: Продвинутые Сообщений: 26 Регистрация: 18.12.2010 Город: Иваново Учебное заведение: ИГЭУ Вы: студент |
Здравствуйте!
суть задачи состоит в следующем: даны координаты(х,у) трех вершин треугольника, и дана четвертая координата точки. требуется определить принадлежит ли точка треугольнику или нет. у меня в принципе задача решена , но только для всех треугольиков кроме прямоугольных. Т.к. я действовал по следующему алгоритму решения данной задачи: я находил уравнения трех прямых которые образуют треугольник, т.е. находил угол наклона(к) к=(у1-у2)/(х1-х2) и так далее... вот здесь то и скрывается подвох... если задать координаты прямоугольного треугольника, то получается деление на ноль... вот я и не могу от этого избавиться. подскажите, как действовать? |
![]() ![]() |
| dimka37 |
26.12.2010, 13:04
Сообщение
#2
|
|
Школьник ![]() Группа: Продвинутые Сообщений: 26 Регистрация: 18.12.2010 Город: Иваново Учебное заведение: ИГЭУ Вы: студент |
если точка находится в какой либо вершине то это сразу видно при вводе начальных данных(IMG:style_emoticons/default/smile.gif) (я над этим задумывался) а так же даже если у нас точка находится на какой либо границе треугольника то это существенно не влияет на ход программы. т.к. мы просто заранее ставим лишние условие чтобы программа не выполняла лишнего действия...
а вот интерес состоит в том что если мы ставим конечно условие на равенство площади треугольника и суммы трех других площадей то при равных площадях нам программа выдаст отказ на принадлежность точки треугольнику(IMG:style_emoticons/default/smile.gif) |
| Botan |
26.12.2010, 13:21
Сообщение
#3
|
|
Новичок ![]() Группа: Продвинутые Сообщений: 5 Регистрация: 26.12.2010 Город: Moscow Учебное заведение: МГТУ им Н.Э. Баумана Вы: студент |
если точка находится в какой либо вершине то это сразу видно при вводе начальных данных(IMG:style_emoticons/default/smile.gif) (я над этим задумывался) а так же даже если у нас точка находится на какой либо границе треугольника то это существенно не влияет на ход программы. т.к. мы просто заранее ставим лишние условие чтобы программа не выполняла лишнего действия... а вот интерес состоит в том что если мы ставим конечно условие на равенство площади треугольника и суммы трех других площадей то при равных площадях нам программа выдаст отказ на принадлежность точки треугольнику(IMG:style_emoticons/default/smile.gif) Насколько я понял, вы прописали нечто вроде If(s1+s2+s3 = s) Then WriteLn('In triangle'); Это неправильно. Ибо дробные числа хранятся не точные. и сравнивать надо так: Заводим некоторый епсилон eps := 0.000000000001; а собственно сравнение: If (abs(s1+s2+s3-s)<eps) Then Write('In triangle'); Функцию abs, считающую модуль числа, я думаю вы сможете написать сами ;-) Есть другой метод. Берём ещё одну точку, такую, что она гарантированно вне треугольника, и отреок, соединяющий нашу точку с новой точкой не проходит ни через одну вершину, и при этом не собержит ни одну сторону треугольника (например с большой вероятностью точка с координатами x+1, y+1000000, где х - абсцисса заданной точки, а у - её ордината, подойдёт). А дальше просто посчитаем число пересечений этого отрезка со сторонами треугольника. Если 0 или 2, то точка вне треугольника, если 1, то внутри. Основная загвоздка этого метода - написать функцию, определяющую, пересекаются ли отрезки. |
dimka37 turbo pascal 18.12.2010, 12:42
Harch Подробнее напишите почему деление на ноль. 18.12.2010, 17:58
dimka37 в прямоугольном треугольнике один из катетов парал... 18.12.2010, 20:08
Harch ищите тогда по-другому, а именно так: если идет де... 19.12.2010, 11:18
dimka37 спасибо, вроде бы представляю как условия будут вы... 19.12.2010, 13:38
Harch Вводите в произвольном порядке а потом упорядочива... 19.12.2010, 16:02
dimka37 об этом я думал, но как потом нужному аргументу по... 19.12.2010, 20:04
граф Монте-Кристо А зачем у Вас вообще в алгоритме нужно вводить коо... 19.12.2010, 20:54
Harch
Согласен с этим. Просто я отвечал на конкретные ... 21.12.2010, 9:19
Botan Например так.
Соеденим нашу точку со всеми вершина... 26.12.2010, 11:02
dimka37 а для того что бы написать функцию пересечения отр... 26.12.2010, 13:56
Botan
а для того что бы написать функцию пересечения от... 26.12.2010, 14:01
dimka37 спасибо, конечно, за активную помощь, но эта прогр... 26.12.2010, 19:58![]() ![]() |
|
Текстовая версия | Сейчас: 19.4.2026, 12:56 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru