点和线

发布时间 2023-11-01 22:58:51作者: yanghui01

点是否在线段上

需要注意的p_p1, p_p2共线,但p不在线段上的情况

 

public static bool IsPointOnSegment(Vector2 p, Vector2 p1, Vector2 p2)
{
    var p_p1 = p1 - p;
    var p_p2 = p2 - p;
    var cross = p_p1.x * p_p2.y - p_p1.y * p_p2.x;
    //叉乘结果如果为0, 说明平行或共线
    if (Mathf.Approximately(cross, 0))
    {
        //x,y方向都在线段端点范围内
        return (p.x - p1.x) * (p.x - p2.x) <= 0 && (p.y - p1.y) * (p.y - p2.y) <= 0;
    }
    return false;
}

 

点是否在直线上 

把p点的x值代入直线方程算出y,如果和p点的y值相同则在直线上

public static bool IsPointOnLine(Vector2 p, float k, float t)
{
    //y=kx+t
    float y = k * p.x + t;
    return Mathf.Approximately(p.y, y);
}

 

参考

【数学基础】玩法常用几何计算汇总 - 知乎 (zhihu.com)

点是否在线段上 - 湫叶 - 博客园 (cnblogs.com)