代码改变世界

区域归属算法

2013-10-08 13:13  ripny  阅读(223)  评论(0)    收藏  举报

假设有目标点A,目标曲线点集合{Pi | i=1,2,3…,n}

大概算法:

(1)作A到所有Pi的向量APi

(2)求出所有APi与x轴正方向的夹角a(i)(可以设x轴正方向为向量(1,0));

         设k = APi * AX / |APi| * |AX|,APi = (x,y) 由于arccosk 的取值范围是 [0, 180°],那么

         如果y>0,则a(i) = arccosk; 否则 a(i) = 360°- arccosk;

(3)求和:s = (∑a(i+1)-a(i)) + a(1)-a(n),i=1,2,…n-1,

         其中,当Δ=| a(i+1)-a(i)|>180°时,若a(i+1)-a(i)>0,则Δ= | a(i+1)-a(i)|-360°

                                                                             若a(i+1)-a(i)<=0,则Δ= 360°- | a(i+1)-a(i)|

(4)如果s=360°,则A在曲线Pi所围的范围之内;如果s=0°,则在其外面;