java - 如何在 Java 中对 Polygon 对象应用变换

标签 java casting transform polygon shapes

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

    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 或知道另一种方法来设置网格转换,请帮忙。

最佳答案

如果 AffineTransform#createTransformedShape 没有为 Polygon 提供所需的结果(看起来确实如此),您可以拆分 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 - 如何在 Java 中对 Polygon 对象应用变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13347503/

相关文章:

css - 容器的变换比例和子容器的逆变换比例

java - 是否可以 Hook 线程创建?

java - Quartz Scheduler抢先触发优先级

java - 使用属性获取元素

c# - 显式运算符重载 + 继承

r - 如何在R中将两列合并为一列,使第二列中的每个值都变成第一列中的每隔一个值?

java - 对于选项卡式 Activity 中使用 fragment 的 GridView ,适配器为空

java - 为什么将除以零转换为整数基元会给出不同的结果?

c++ - GetModuleFileNameW 的转换错误

SQL 将任意字符转换为零 0