|
|
发表于 2005-7-11 23:45:00
|
显示全部楼层
Re:请问怎么判断一个点是否在多边形之内?
射线法不一定好用吧……(我没用过,所以不知道)
//多边形A(X1,Y1),B(X2,Y2),C(X3,Y3)
//点F(X,Y)
//斜率
Kab = (Y1-Y2)/(X1-X2), Kac = (Y1-Y3)/(X1-X3), Kbc = (Y2-Y3)/(X2-X3),
Kaf = (Y1-Y)/(X1-X), Kcf = (Y3-Y)/(X3-X)
bool PointPosition(float Kab,float Kac,float Kbc,float Kaf,float Kcf)
{
if(Kab>Kac) {if((Kab<Kaf)&&(Kac>Kaf)) return false;} else {if((Kab>Kaf)&&(Kac<Kaf)) return false;} //判断AF的斜率是否在AB和AC的斜率之间,如果不是,返回false
if(Kbc>Kac) {if((Kbc<Kcf)&&(Kac>Kcf)) return false;} else {if(Kbc>Kcf)&&(Kac<Kcf)) return false;} //判断CF的斜率是否在AC和BC的斜率之间,如果不是,返回false
//如果AF的斜率在AB和AC之间,并且CF的斜率在AC和BC之间,就说明点F在多边形ABC之内
return true;
}//这样做应该可以吧……
PS:以上是我自己想的,5次计算+最多6次判断不算太麻烦吧……关键是都是以“点”的形式作为输入,对于空间多边形比较方便,而且不用考虑Z值(当作是XY平面的投影),前提是先判断是否垂直于某平面,如果是就投影到其他平面,呵呵 |
|