向量叉乘判断两点是否在线段同侧

发布时间 2023-11-05 21:17:17作者: yanghui01

ap1×ab与ap2×ab的结果异号,则表示两点在线段两侧;同号则表示在线段同侧

 

有一个点在线段上或两个点都在线段上,当做在线段同侧处理

 

//两点是否在线段同侧
public static bool IsTwoPointSameSideOfSegment(Vector2 a, Vector2 b, Vector2 p1, Vector2 p2)
{
    var a_p1 = p1 - a;
    var ab = b - a;
    float cross1 = a_p1.x * ab.y - a_p1.y * ab.x;
    if (Mathf.Approximately(cross1, 0)) //p1与线段ab共线
        return true;

    var a_p2 = p2 - a;
    float cross2 = a_p2.x * ab.y - a_p2.y * ab.x;
    if (Mathf.Approximately(cross2, 0)) //p2与线段ab共线
        return true;

    var result = cross1 * cross2;
    return result > 0; //叉乘结果同符号, 则表示同侧
}

 

参考

【Computer Graphics】点到三角形距离及内外判断_点到三角形的距离-CSDN博客