计算点到直线的距离

/// <summary>
/// 点到直线的距离
/// </summary>
/// <returns>The of point to vector.</returns>
/// <param name="startPoint">Start point.</param>
/// <param name="endPoint">End point.</param>
/// <param name="point">Point.</param>
public static float PointToStraightlineDistance(Vector3 lineStartPoint, Vector3 lineEndPoint, Vector3 targetPoint)
{
    //需要转到2维平面计算
    Vector2 startVe2 = IgnoreYAxis(lineStartPoint);
    Vector2 endVe2 = IgnoreYAxis(lineEndPoint);
    float A = endVe2.y - startVe2.y;
    float B = startVe2.x - endVe2.x;
    float C = endVe2.x * startVe2.y - startVe2.x * endVe2.y;
    float denominator = Mathf.Sqrt(A * A + B * B);
    Vector2 pointVe2 = IgnoreYAxis(targetPoint);
    return Mathf.Abs((A * pointVe2.x + B * pointVe2.y + C) / denominator);
}


/// <summary>
/// 去掉三维向量的Y轴,把向量投射到xz平面。
/// </summary>
/// <param name="vector3"></param>
/// <returns></returns>
public static Vector2 IgnoreYAxis(Vector3 vector3)
{
    return new Vector2(vector3.x, vector3.z);
}

猜你喜欢

转载自blog.csdn.net/strivero/article/details/53078563
今日推荐