旋转多个图像-Java
我正在用Java为一个类项目创建一个飞行雷达模拟器 到目前为止,我已经能够显示许多小型飞机图像,它们以给定的方向和不同的速度在雷达上移动 我的问题是如何旋转每个飞机图像以跟随其在雷达中的方向。旋转多个图像-Java,java,rotation,graphics2d,Java,Rotation,Graphics2d,我正在用Java为一个类项目创建一个飞行雷达模拟器 到目前为止,我已经能够显示许多小型飞机图像,它们以给定的方向和不同的速度在雷达上移动 我的问题是如何旋转每个飞机图像以跟随其在雷达中的方向。 这条线显示了平面移动的方向,并且应该指向它。我假设您使用的是Java2d,所以您应该看看Java中有几种方法可以做到这一点AffineTransform可以工作,但我发现我无法轻松调整图像大小以处理非90度旋转。我最终实现的解决方案如下。以弧度表示的角度 public static BufferedIm
这条线显示了平面移动的方向,并且应该指向它。我假设您使用的是Java2d,所以您应该看看Java中有几种方法可以做到这一点
AffineTransform
可以工作,但我发现我无法轻松调整图像大小以处理非90度旋转。我最终实现的解决方案如下。以弧度表示的角度
public static BufferedImage rotate(BufferedImage image, double angle) {
double sin = Math.abs(Math.sin(angle)), cos = Math.abs(Math.cos(angle));
int w = image.getWidth();
int h = image.getHeight();
int newW = (int) Math.floor(w * cos + h * sin);
int newH = (int) Math.floor(h * cos + w * sin);
GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getDefaultScreenDevice()
.getDefaultConfiguration();
BufferedImage result = gc.createCompatibleImage(newW, newH, Transparency.TRANSLUCENT);
Graphics2D g = result.createGraphics();
g.translate((newW - w) / 2, (newH - h) / 2);
g.rotate(angle, w/2, h/2);
g.drawRenderedImage(image, null);
g.dispose();
return result;
}
就上述飞机而言,这是必然的。每架飞机只有几个像素宽,因此像素的舍入将是明显的。我想到了三个解决办法:1。使用更大的飞机图像,在缩放前旋转,并使用这些图像而不是旋转,2。在同一平面上以不同角度制作几个精灵,3。使用矢量而不是光栅图像(即svg)和蜡染之类的库。第三个想法更难实现,但会产生更好的图形效果。