如何在Java中将转换应用于Polygon对象

时间:2012-11-12 16:29:33

标签: java casting transform polygon shape

我做了一个变换并用它渲染了一个Polygon对象(网格是Polygon类型):

    at.setToTranslation(gameObject.position.x, gameObject.position.y);
    at.rotate(Math.toRadians(rotation));
    at.scale(scale, scale);
    g2d.setTransform(at);
    g2d.fillPolygon(mesh);

现在我想返回我渲染的确切网格,以便我可以对它进行碰撞检查。唯一的问题是,如果我返回网格,它返回未转换的网格。所以我尝试将变换设置为Polygon对象(网格),如下所示:

    mesh = (Polygon)at.createTransformedShape(mesh);

但遗憾的是at.createTransformedShape()返回一个只能转换为Path2D.Double的Shape。所以,如果有人知道如何将Path2D.Double转换为Polygon或知道另一种设置转换为网格的方法,请帮助。

1 个答案:

答案 0 :(得分:1)

如果AffineTransform#createTransformedShape没有为Polygon提供所需的结果(看起来似乎是这种情况),您可以将Polygon拆分为Point s,转换每个Point并合并为一个新的Polygon。尝试:

//Polygon mesh
//AffineTransform at

int[] x = mesh.xpoints;
int[] y = mesh.ypoints;
int[] rx = new int[x.length];
int[] ry = new int[y.length];

for(int i=0; i<mesh.npoints; i++){
  Point2d p = new Point2d.Double(x[i], y[i]);
  at.transform(p,p);
  rx[i]=p.x;
  ry[i]=p.y;
}

mesh = new Polygon(rx, ry, mesh.npoints)