【问题标题】:How to Apply transformation to Polygon object in Java如何在 Java 中对多边形对象应用变换
【发布时间】:2012-11-12 16:29:32
【问题描述】:

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

    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() 返回的 Shape 只能转换为 Path2D.Double。因此,如果有人知道如何将 Path2D.Double 转换为 Polygon 或知道将转换设置为网格的另一种方法,请提供帮助。

【问题讨论】:

  • 您应该指定您正在使用的语言(作为标签),并且可能还指定您正在使用的库。它看起来像 Java + Swing,但许多语言看起来有点像 Java。
  • 是的java。对象是 java.awt.geom.AffineTransform 和 java.awt.Polygon
  • 我会说 AffineTransform 不知道如何将多边形转换为多边形,所以 createTransformedShape 不是要走的路。

标签: java casting transform polygon shape


【解决方案1】:

如果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)

【讨论】:

  • 感谢您的回答,但您的代码由于某种原因无法正常工作。网格碰撞就像多边形没有旋转一样工作。
  • 我正在使用 java.awt.geom.AffineTransform,然后我的碰撞检查如下所示:
  • for(int i=0; i
  • 目标作为参数接收,是同一类的对象
  • Nvm。您的解决方案是正确的,我只是没有正确应用它。抱歉,谢谢
猜你喜欢
  • 2021-08-17
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多