Найти нормаль пересечения между многоугольником и линией libgdx - PullRequest
1 голос
/ 12 апреля 2019

Я изменил некоторый код в классе Intersector в libgdx, чтобы найти пересечение между линией и многоугольником. Однако я не уверен, как рассчитать нормаль точки столкновения. Ниже приведен код, который у меня есть.

    public static Vector2 intersectSegmentPolygon (Vector2 p1, Vector2 p2, Polygon polygon) {
        float[] vertices = polygon.getTransformedVertices();
        float x1 = p1.x, y1 = p1.y, x2 = p2.x, y2 = p2.y;
        int n = vertices.length;
        float x3 = vertices[n - 2], y3 = vertices[n - 1];
        for (int i = 0; i < n; i += 2) {
            float x4 = vertices[i], y4 = vertices[i + 1];
            float d = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
            if (d != 0) {
                float yd = y1 - y3;
                float xd = x1 - x3;
                float ua = ((x4 - x3) * yd - (y4 - y3) * xd) / d;
                if (ua >= 0 && ua <= 1) {
                    float ub = ((x2 - x1) * yd - (y2 - y1) * xd) / d;
                    if (ub >= 0 && ub <= 1) {
                        return new Vector2(x1 + (x2 - x1) * ua, y1 + (y2 - y1) * ua);
                    }
                }
            }
            x3 = x4;
            y3 = y4;
        }
        return null;
    }
...