一平面三角形三顶点已知(x1,y1)、(x2,y2)、(x3,y3),如何

来源:互联网 发布:淘宝如何看卖家销售额 编辑:程序博客网 时间:2024/04/29 20:08
一平面三角形三顶点已知(x1,y1)、(x2,y2)、(x3,y3),如何
判断平面上任一点(x,y)是否在三角形内?   
可以参考GIS中判断点与任意多边形关系的算法:
 1.转角法
    假设某平面上有点P0和多边形P1 P2 P3 P4 P5,以点P0为中心,从多边形P1 P2 P3 P

4 P5任一顶点开始顺次走过多边形所有顶点,如最后回到起点时的转角之和为360度,则该

点在多边形内;如转角之和为0度,则该点在多边形外;若P0正好在多边形某条边上或与某

个顶点重合,则可认为在多边形外。如下图所示,具体的算法如下:

图五  转角法判断点与多边形的位置关系

    将点P0分别与Pi相连,构成向量Vi =Pi-P0。假设角∠PiP0Pi+1=αi,αi可由下列公

式计算
                       αi=arccos(Vi·Vi+1/|Vi||Vi+1|)
αi角度的方向一般是通过计算两个向量的叉积的符号来判断。


2射线法

   (1)  如图五所示,从点P(xp,yp)引一条与y轴平行的射线Px,该射线方程为x=xp,交

点个数计数器清零,设计算误差为ep。                                        (2)
 粗判,测试多边形上的边ei是否与Px相交,设ei=( (xi,yi),(xi+1,yi+1)
)。
若|xi-xi+1|<ep,则ei是与Y轴平行的直线段,不作处理,转(4);
若yi>yp+ep且yi+1>yp+ep,则Px与ei无交点(如图中边e5),转(4);
若xi>xp-ep且xi+1>xp-ep,则Px与ei无交点(如图中边e6),转(4);
若xi<xp-ep且xi+1<xp-ep,则Px与ei无交点(如图中边e8),转(4);
这样可以很快去掉那些明显与射线不交的边。
   (3) 细判,求ei与Px的交点为(xp,y0)。
若|y0-yp|<=ep,则点P在多边形的边界上,结束;
若y0>yp,需进一步判断,取边ei中y值较大的一端点,
若|xi-xp|<ep,且|yi-yp|<=ep,则点在多边形的边界上,结束;
若|xi-xp|<ep,且yi>yp,则交点无效,转(4);
若|xi-xp|<ep,且yi<yp,则交点计数器加一,转(4);
若y0<yp,且xi-ep<=xp<xi+1-ep或xi+1-ep<=xp<xi,则交点计数器加一,这条规则称为左

闭右开(见图中边e9,e10和边e2,e3),转(4);
   (4) 判断多边形上是否还有未检测的边,若有转(2)。否则判断交点计数器,如有

奇数个交点,则该点在多边形之内。否则在多边形之外。
原创粉丝点击