- 帖子
- 61
- 积分
- 92
- 技术
- 0
- 捐助
- 0
- 注册时间
- 2014-4-22
|
多边形顶点数据如下:
A
96.802,87.23
89.094,78.623
92.268,64.808
115.391,61.863
124.913,77.265
115.845,90.174
102.696,92.439
96.802,87.23
待判断的点
如果点在多边形外就保存下来>>c.txt
如果点在多边形内或者多边形边上就剔除它>>d.txt
基本思路是用射线法,计算以待判断点(yt,xt)为起点,
平行向右或者向上发射射线,依次与每条多边形的边发射,判断有没有交点,有偶数个交点包括0,就说明在多边形内,那么这一行数据>>d.txt。奇数个就>>c.txt
当某条边的两个顶点x坐标 x(1),x(2)满足如下条件时
If xt >= x1 And xt < x2 or xt <= x1 And xt > x2 then ::就是说要依次找到相交的可能性,再去判断下面的
set yt=yi+(y2-y1)(xt-x1)/(x2-x1)
if yt > y0 Then Ncross = Ncross + 1 ::如果有交点,交点数Ncross就+1
每个点遍历每条边,if Ncross%2=0,>>d.txt
else if Ncross%2=1,>>c.txt
因为需要判断的点数据量非常大(有几百万个),用vb还可以做出来,但是速度太慢了,最近感受到了gawk的速度,想用gawk或者sed去解决,但是又涉及到二维数组,头大,哪位大神能帮帮忙 |
|