点是否在线段两侧

发布时间 2023-11-03 00:15:46作者: yanghui01

不在两侧时

  

在两侧时 

  

 

//点是否在线段两侧
public static bool IsPointSideOfLine(Vector2 p, Vector2 a, Vector2 b)
{
    var ap = p - a;
    var ab = b - a;
    if (Vector2.Dot(ap, ab) < 0) //夹角为钝角, 大于90度时, cos值<0
        return true;

    var ba = -ab;
    var bp = p - b;
    if (Vector2.Dot(ba, bp) < 0)
        return true;

    return false;
}

注意:点乘不区分向量的先后关系,因为cos(60)和cos(-60)结果一样,cos(120)和cos(-120)结果也一样。所以,向量间顺时针还是逆时针无区别。

 

参考

判断线段与圆是否相交_判断线段和圆相交-CSDN博客