如何在 Java 中将转换应用于多边形对象



>我已经进行了转换并用它渲染了一个多边形对象(网格是多边形类型):

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

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

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

但不幸的是,at.createTransformedShape() 返回了一个只能转换为 Path2D.Double 的形状。 因此,如果有人知道如何将 Path2D.Double 转换为多边形或知道将变换设置为网格的另一种方法,请提供帮助。

如果AffineTransform#createTransformedShape没有为Polygons 提供所需的结果(似乎是这种情况),您可以将Polygon拆分为Points,转换每个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)

最新更新