0

我有一个可能在多边形内部或外部的点,我需要从该点找到多边形上的最短点。

提前谢谢

4

1 回答 1

0

我不知道这是否能回答你的问题,但这是我几年前写的一段代码。
它从多边形点列表中计算点索引以及垂直线到最近边缘的距离。

它使用一个Vector2定义向量运算符+, -, *(点积)和方法GetLengthand的结构体GetSquaredLength。相同的代码也应该与Vector3(3D)一起运行。

详情请看评论。

    // Polygon points
    List<Vector2> p;

    /// <summary> Calculates the perpendicular vector from nearest point on polygon to given point. If no points available minIndex is -1. </summary>
    public void GetPolygonDist(Vector2 point, out Vector2 minDist, out int minIndex) {
        if (p.Count == 0) { minDist = Vector2.Null(); minIndex = -1; return; }
        Vector2 dist;
        minDist = point - p[0];
        minIndex = 0;
        for (int i = 0; i < p.Count - 1; i++) {
            Vector2 l = p[i + 1] - p[i];                                        // Edge
            if (l.GetLength() < 1e-9) continue;                                 // Ignore edge of length almost zero
            Vector2 d = point - p[i];                                           // Polygon point to point
            Vector2 b = (l * d) / (l * l) * l;                                  // Projection to edge
            double f = Math.Sign(b * l) * (b.GetLength() / l.GetLength());      // Where on the edge is the perpendicular?
            if (f < 0.0) dist = point - p[i];                                   // Point before the edge
            else if (f > 1.0) dist = point - p[i + 1];                          // Point after the edge
            else dist = d - b;                                                  // Perpendicular
            if (dist.GetSquaredLength() < minDist.GetSquaredLength()) {
                minDist = dist;
                minIndex = i;
            }
        }
    }
于 2014-07-03T12:24:50.280 回答