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