查找多边形和直线libgdx之间的交点的法线

时间:2019-04-12 11:24:37

标签: java libgdx polygon intersection gdx-ai

我在libgdx的Intersector类中修改了一些代码,以找到线和面之间的交点。但是,我不确定如何计算碰撞点的法线。下面是我的一些代码。

    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;
    }

0 个答案:

没有答案