算法:如果是凸多边形,我觉得这样很方便:1)在多边形内任取一点A(比如是某对角线的中点,如果是三角形则取某中线的中点)。2)判断未知点(设为B)与A是否在任何一条边的同侧。方法简单有效:设任一边的直线方程为:y=ax+b;令F(x)=ax+b-y;只需判断F(A)×F(B)>0:A,B同侧 =0:在边上 <0:异侧,则点B在多边形外遍历每条边,如果A,B都在同侧,则点B在多边形内;如果是凹多边形,就无法找到像A的点。已经说了凸多边形的方法了。
但是对于凹多边形的解法可能并不是经典做法。对于凹多边形的经典做法如下:1. 做一条过被测试点P的任意直线。2. 求得所有和多边形的交点。这里需要正确判断“奇点”和“偶点”。3. 从点P开始沿着直线往外面数,如果不算点P,能够数的点数为奇数点,则说明点P在多边形内,否则如果是偶数点,则说明点P在多边形外。另外,还须仔细检查P是否在多边形上。
库函数:C++的PtInRegion