Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.02;
Скачать: CL | DM;

Вниз

Точка в полигоне!!!   Найти похожие ветки 

 
F1 ©   (2002-12-15 13:27) [0]

Недавно извращался, писал такую хрень, для узнавания находится ли точка в полигоне или нет... Может кому надо... Только немного доработать надо, а то на ноль полохо делится :)))


Type
TRealPoint = record
x:Real;
y:Real;
end;

PRealItem=^TRealItem;

TRealItem = record
X:Real;
Next:PRealItem;
end;


function PointInPoligon(Point:TRealPoint; Poligon:Array of TRealPoint; IndFirst,IndLast:Integer):Boolean;
var
Ind,Ind1:Integer;
FirstItem,Item,Item1:PRealItem;
x:Real;
C:Integer;
begin
FirstItem:=0;
C:=0;
for Ind:=IndFirst to IndLast do
begin
Ind1:=Ind+1;
if Ind1>IndLast then Ind1:=IndFirst;
if (Poligon[Ind].y-Point.y>0) xor (Poligon[Ind1].y-Point.y>0) then
begin
C:=C+1;
x:=(Poligon[Ind].x+(Poligon[Ind1].x-Poligon[Ind].x)*(Poligon[Ind].y-Point.y)/(Poligon[Ind].y-Poligon[Ind1].y));
if FirstItem=Nil then
begin
New(FirstItem);
FirstItem^.Next:=Nil;
FirstItem^.X:=x;
end else
begin
if x<FirstItem^.X then
begin
New(Item);
Item^.Next:=FirstItem;
Item^.X:=x;
FirstItem:=Item;
end else
begin
Item:=FirstItem;
while Item^.Next<>Nil do
if Item^.Next^.X > x then Break else Item:=Item^.Next;
New(Item1);
Item1^.X:=x;
Item1^.Next:=Item^.Next;
Item^.Next:=Item1;
end;
end;
end;
end;{For}
Result:=False;
Item:=FirstItem;
if FirstItem<>Nil then
repeat
if Point.x<Item^.X then
begin
Break;
end else
begin
Item:=Item^.Next;
Result:=Not Result;
end;
until Item = nil;
end;


 
Romkin ©   (2002-12-15 13:31) [1]

Ой мама! а просто CreatePoligonRgn и потом PtInRegion?


 
F1 ©   (2002-12-15 13:34) [2]

Romkin © (15.12.02 13:31)
Ой мама! а просто CreatePoligonRgn и потом PtInRegion?

Я же сказал, "извращался", геометрию вспоминал!!! :)))



Страницы: 1 вся ветка

Текущий архив: 2003.01.02;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
14-1896
vivjera
2002-12-14 18:12
2003.01.02
подскажите пожалуйста (SOS)


14-1891
Agent Smith
2002-12-11 14:38
2003.01.02
С днем рождения, MBo!


3-1748
sers
2002-12-11 13:29
2003.01.02
Что-то вроде триггера для dbf


6-1849
ppcat
2002-11-05 13:25
2003.01.02
Как получить список пользователей?


1-1812
ТУПОЙ
2002-12-19 18:23
2003.01.02
Application Events