点到线段的距离

点到直线公式计算的是点和直线之间的关系,而不是点和线段之间的关系
需要额外的判断,点在线段上的投影点是否位于线段内部,是才可以采用点到直线的公式

public static float distancePoint2LineSeg(Vector3 point, Vector3 linePoint1, Vector3 linePoint2)
{
Vector3 v12 = linePoint2 - linePoint1;
Vector3 v10 = point - linePoint1;
float f = Vector3.Dot (v12, v10);
if (f < 0)
{
return Vector3.Distance (point, linePoint1);
}
float d = Vector3.Dot (v12, v12);

    if (f > d)
    {
        return Vector3.Distance (point, linePoint2);
    }

    f = f / d;
    Vector3 pointD = linePoint1 + f * v12;
    return Vector3.Distance (point, pointD);
}

简单的办法,即满足公式 线段 PA的长度 + PB的长度 - AB的长度 < X 即可,
即以A,B为焦点的一个椭圆范围内(椭圆上的任一点到两个焦点之间的长度的和是固定值),这个方法只用计算三个线段的长度就可以了,简单,计算量小,且效果很好。

float radius = Vector2.Distance (posB, posC);
float disA = Vector2.Distance (posA, posB);
float disB = Vector2.Distance (posA, posC);

return disA + disB - radius <= radius * 1.5;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容