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

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博客

 

posted @ 2023-11-05 21:12  yanghui01  阅读(116)  评论(0编辑  收藏  举报