Приветствую Вас Гость | RSS

Delphi заготовки

Четверг, 02.05.2024, 15:16
Главная » 2012 » Май » 2 » Пример определения лежит ли точка внутри треугольника
08:24
Пример определения лежит ли точка внутри треугольника
Delphi. пример программы для определения входит ли точка в треугольник.

опишем переменные
Var
  a,b,c : Tpoint; // вершины треугольника
  d: Tpoint; // произвольная точка


// процедура возвращает длину отрезка A; B;
Function Dlina(a,b:Tpoint):Extended;
var x1,y1,x2,y2:real;
begin
x1:=a.x;
y1:=a.y;
x2:=b.x;
y2:=b.y;
   result:=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)) // по теореме Пифагора
   // http://ru.wikipedia.org/wiki/%D2%E5%EE%F0%E5%EC%E0_%CF%E8%F4%E0%E3%EE%F0%E0
end;

// находим площадь треугольника по теореме
// формула Герона   
// http://ru.wikipedia.org/wiki/%D4%EE%F0%EC%F3%EB%E0_%C3%E5%F0%EE%ED%E0

Function GetS(a,b,c:Tpoint):real;
var p,r1,r2,r3:real;
begin
 r1:=Dlina(a,b);
 r2:=Dlina(b,c);
 r3:=Dlina(c,a);
 p:=(r1+r2+r3)/2;
 if p*(p-r1)*(p-r2)*(p-r3)>0 then
 result:=sqrt(p*(p-r1)*(p-r2)*(p-r3))
 else result:=0;
end;

// функция определения лежит ли точка Pn внутри треугольника ABC
для этого рассчитываем площади треугольников
ABC
ABD
ADC
DBC и смотрим чему равно

 | ABC -  ABD - ADC - DBC | < 0.0001 значит точка лежит в  треугольника ABC иначе вне ее
 
Function GetPointInTR(a,b,c,Pn:Tpoint):boolean;
begin
   result:=abs(GetS(a,b,c)-GetS(a,b,pn)-GetS(a,pn,c)-GetS(pn,b,c))<0.0001;
end;

напишем не большой пример  на Delphi для закрепления








Просмотров: 4193 | Добавил: NetSoftWare | Рейтинг: 4.3/3
Всего комментариев: 1
1 NetSoftWare  
0

Имя *:
Email *:
Код *: