Java 如何围绕远程点旋转单个图像

Java 如何围绕远程点旋转单个图像,java,Java,我正在用java开发一个类似于管射击游戏的游戏,它模拟3D而不实际使用任何3D库。现在我有一个玩家控制的飞船,它围绕屏幕的中心点旋转,使用(在本例中,用于向右移动) 其中,角度是相对于中心点的位置(例如270位于中心正下方),x和y是当前船舶位置,半径是距离中心的距离,cX和cY是中心点的位置 现在围绕着点旋转工作很顺利,但我不知道如何处理旋转实际船舶始终指向中心。我在网上查阅了很多资料,但不知道如何在不影响屏幕上其他对象的情况下旋转单个图像(或者如果这不起作用,一系列绘图线) 长话短说,如何旋

我正在用java开发一个类似于管射击游戏的游戏,它模拟3D而不实际使用任何3D库。现在我有一个玩家控制的飞船,它围绕屏幕的中心点旋转,使用(在本例中,用于向右移动)

其中,
角度
是相对于中心点的位置(例如270位于中心正下方),
x
y
是当前船舶位置,
半径
是距离中心的距离,
cX
cY
是中心点的位置

现在围绕着点旋转工作很顺利,但我不知道如何处理旋转实际船舶始终指向中心。我在网上查阅了很多资料,但不知道如何在不影响屏幕上其他对象的情况下旋转单个
图像
(或者如果这不起作用,一系列
绘图线


长话短说,如何旋转单个
图像
以不断指向远程x,y位置?

您需要的是
仿射变换
类,它在java中基本上是一个矩阵类
Graphics2D
有一个draw image变量,它接受一个
AffineTransform
实例:

boolean java.awt.Graphics2D.drawImage(Image img, AffineTransform xform, ImageObserver obs)
要创建变换,可以使用二维矩阵操作:

AffineTransform trans = new AffineTransform();
trans.translate(x, y);
trans.rotate(theta);
trans.scale(scalex, scaley);
etc...
请注意,顺序很重要,您可能需要先缩放、旋转图像,然后将图像平移到相应的位置。应该可以

Java使用了一些3D功能来尽可能快地绘制,它比软件渲染器快,但与原生opengl相去甚远

AffineTransform trans = new AffineTransform();
trans.translate(x, y);
trans.rotate(theta);
trans.scale(scalex, scaley);
etc...