判断点在有向线段的左边还是右边

判断平面上的点与有向线段的位置关系是计算几何里面的最基本的问题,求解该问题的算法主要运用在凸壳的构造方面,如三角形,凸多变形的构造。网上最流行的两种判别方法是面积法和向量法,但这两种方法本质上是一样的。都是利用二维向量的叉乘等于三个点组成的三角形的“面积”的两倍来计算,这里的“面积”是一个有正有负的数值,我们刚好可以用这个值来判断点在线段的左边还是右边,比如有P1,P2两个点构成一条有向线段P1P2,我们要做的是判断点P在P1P2的左边还是右边,
设向量V1=P1P2=(x1,y1), V2=PP1=(x2,y2),
则”面积”f=x1y2-x2y1.
若f>0则点P在P1P2的右侧;
若f<0,则点P在P1P2的左侧;
若f=0,则点P在P1P2的延长线上。
C++代码如下:

#define Vsub(D,A,B) D.x=A.x-B.x; D.y=A.y-B.y
struct vertex
 {
     float x;
     float y;
 };
float Isleft(vertex p1, vertex p2, vertex p)
{
    vertex V1, V2;
    Vsub(V1,p1,p2);
    Vsub(V2, p, p1);
    float f = V1.x*V2.y - V2.x*V1.y;
    return f;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值