欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

gis算法——点是不是在指定区域内

更新时间: 2014-01-05 02:58:48 责任编辑: Author_N1

 

GIS算法——点是否在指定区域内
GIS算法——点是否在指定区域内

代码:
GPoint = record
X: Double; //经度,也使用于任何座标
Y: Double; //纬度
end;


GRange = array of GPoint;

函数返回true 点为在区域内


function GPointInPolygonX(P: GPoint; L: GRange): Boolean;
var
Num, i: Integer;
a, da, suma, pa, a0: double;
dp0, dp1: double;
twopi, pi: double;
begin
Num := Length(L);
pi := 3.1415926535897932384626433832795;
twopi := 2.0 * pi;

suma := 0.0;
dp0 := L[0].x - p.x;
dp1 := L[0].y - p.y;
a0 := ArcTan2(dp1, dp0);
if a0 < 0.0 then
a0 := a0 + twopi;

pa := a0;
for i := 1 to Num - 1 do
begin
dp0 := L[i].x - p.x;
dp1 := L[i].y - p.y;
a := ArcTan2(dp1, dp0);
if a < 0.0 then
a := a + twopi;
da := a - pa;
if da < -pi then
da := da + twopi; //insure the direction is croccet
if da > pi then
da := da - twopi;
suma := suma + da;
pa := a;
end;

da := a0 - pa;
if da < -pi then
da := da + twopi;
if da > pi then
da := da - twopi;
suma := suma + da;
//return (int)((fabs(suma)+1.0e-5)/twopi);
if floor((abs(suma) + 1.0E-5) / twopi) = 0 then
Result := False
else
Result := True;
end;
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:58:48
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/16922/
本文WWW.DOC100.NET DOC100.NET版权所有。