Дана точка(x;y;). Определить, принадлежит ли она треугольнику, заданному координатами своих вершин
По-моему этот вопрос уже и на этом форуме был. Как бы то ни было напомню, что в этом случае следует воспользоваться обходом контура. Смотри пункт 7. Скажем дружно- нафиг нужно!
спасибо за быстрый ответ, но хотелось бы кое что уточнить.
Q = x(y2-y1)+y(x1-x2)+y1*x2-x1*y2
я прописываю эту формулу, где x,y-координаты точки, а x1,y1,x2,y2 - координаты начала и конца прямой(стороны треугольника). таким образом, у меня в переменной ку получается некое число. далее, как я понял нужно сравнить числа(из переменной ку) для все сторон треугольника. т.е. если все три числа будут или отрицательными или положительными, то точка в треугольнике, иначе вне его. правильно ли я понял?
Нет. Если соединить точку (х,у) с каждой из вершин треугольника, то получатся 3 треугольника. Здесь очевидно, что если точка входит в треугольник, то сумма площадей этих треугольников должна быть равна площади исходного треугольника. Но в данной ситуации удобнее вычислить ориентированные площади этих маленьких треугольников. Если они будут одного знака, то точка принадлежит исходному треугольнику. В твоих обозначениях это будет выглядить так: все три выражения удвоенных площадей- (y2-y1)*(x-x1)-(x2-x1)*(y-y1) (y3-y2)*(x-x2)-(x3-x2)*(y-y2) (y1-y3)*(x-x3)-(x1-x3)*(y-y3) должны быть одного знака. Другой способ(глупее, но возможно понятнее). Провести прямую через точки (x1,y1) и (x,y). Проверить пересекает ли она отрезок соединяющий точки (x2,y2) и (x3,y3). Скажем дружно- нафиг нужно!
var x,y,x1,y1,x2,y2,x3,y3,s1,s2,s3:integer; begin readln(x,y); {вводим координаты точки} readln(x1,y1); readln(x2,y2); {вводим координаты вершин треугольника} readln(x3,y3); s1:=(y2-y1)*(x-x1)-(x2-x1)*(y-y1); s2:=(y3-y2)*(x-x2)-(x3-x2)*(y-y2); {три выражения удвоенных(стоп, разве удвоенных?) площадей} s3:=(y1-y3)*(x-x3)-(x1-x3)*(y-y3); if (s1>0) and (s2>0) and (s3>0) or (s1<0) and (s2<0) and (s3<0) then writeln('принадлежит треугольнику') else writeln('net'); end.
Конечно удвоенных. (y2-y1)*(x-x1)-(x2-x1)*(y-y1) эквивалентно {01}*{12}*sin(012), где {01}*sin(012)=h(высота), а площадь треугольника это ПОЛ основания на высоту.
Quote
вот так?
не совсем:
Quote
if ((s1>0) and (s2>0) and (s3>0)) or ((s1<0) and (s2<0) and (s3<0))
Кстати, если координаты вводить не беспорядочно, а чтоб x возрастал- то можно убрать проверку на отрицательные площади, т.к. обход контура будет строго по часовой стрелке. Скажем дружно- нафиг нужно!
Я бы так не сказал, это у равнобедренного треугольника половина основания на высоту !!!
А если треугольник разносторонний, там можно площадь по теореме Герона найти.
кошмар, я в шоке. Срочно найди учебник по геометрии за шестой класс. Это даже интуитивно должно быть понятно: 1) прямоугольный треугольник ABC с гипотенузой BC, тогда если на гипотенузе построить такой же треугольник, то мы получим прямоугольник со сторонами AB и AC, а стало быть площадью AB*AC. Откуда видно, что площадь одного треугольника равна AB*BC/2. 2) пусть дан произвольный треугольник ABC, с высотой AD. Тогда его можно разбить на два прямоугольных треугольника ABD и BCD, площади которых равны AD*BD/2 и BD*CD/2(см. пункт 1). Стало быть площадь ABC равна AD*BD/2+BD*CD/2=(AD+CD)/2*BD=AC/2*BD, ч.т.д. З.Ы. А самое забавное, что формула Герона выводится именно из этой. Скажем дружно- нафиг нужно!
Сообщение отредактировал Alexander - Суббота, 29.11.2008, 01:08
Alexander, блин, я помню нам училка ещё всё время говорила что половина основания на высоту -это формула тока для равнобедренного треугольника.
бред, такого нормальный человек не мог сказать. Раз уж ты в этом так уверен, то выведи здесь формулу Герона, без использования этого тождества, уж очень хочется посмотреть. И вообще, что за манера в ответ на конкретное доказательство швыряться левыми фразами типа "я точно знаю", "мне училка сказала", "так звёзды говорят"? Лучше ищи ошибку в моих рассуждениях, а твоя "училка" для меня авторитетом не является. И вообще в математике нельзя никому верить, всё надо выводить, проверять и доказывать самостоятельно, а иначе ты её никогда не поймёшь. Скажем дружно- нафиг нужно!
это формула тока для равнобедренного треугольника.
Тебе не стыдно такой бред писать, каждый младенец знает что ето для прямоугольного треугольника! Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?