旋转矩形后如何获得一个点

5

我拥有一个精灵,知道它的位置和背后的矩形。

我想要获取精灵后面的位置,已知偏移量。

我的意思是:

Point p=new Point(sprite.getX()-offset,sprite.getY()-sprite.getHeight()/2);

如果我将精灵绕其中心原点旋转,我想要得到该点的新位置。
下面是一张图,可以更好地说明问题: enter image description here
4个回答

3

您需要提供旋转中心的坐标(即保持不变的点)。

X' = (X - Xc) * cos(A) - (Y - Yc) * sin(A) + Xc
Y' = (Y - Yc) * cos(A) + (X - Xc) * sin(A) + Yc

如果您能告诉我们哪些部分出了问题,那就更好了,因为您并没有提供任何线索...


我正在使用这个代码,但是得不到正确的结果:double sx = ((line.getStartX() - circle.getCenterX()) * Math .cos(rotation)) - ((line.getStartY() - circle.getCenterY()) * Math .sin(rotation)) + circle.getCenterX(); - Jay Thakkar
@Jay:这个评论也适用于你:“如果你不给任何提示,告诉我们哪些地方不起作用,那也是很好的...” - user1196549
我只想知道两件事情:1)如何获取角度,2)这个角度是弧度还是度数。 - Jay Thakkar
  1. 如何获取角度:从哪些已知条件开始???
  2. 这个角度是弧度还是角度:就像数学要求的那样。
- user1196549
我在Game Maker Studio 2中使用了这个,但是我必须执行(360-angle)并将度数转换为弧度,否则它会旋转到错误的方向。 - Lokiare
@Lokiare:是的,这取决于你的轴的方向。-angle也可以使用。 - user1196549

1

在Libgdx中查看Sprite的源代码,可以看到getVertices()方法,其中有一些本地计算,这可能会有所帮助。

这个链接非常有用。

http://www.philvaz.com/games/rotate.htm

xnew = x * cos(angle) - y * sin(angle)
ynew = y * cos(angle) + x * sin(angle)

0

查阅AffineTransform类的文档,以及Wolfram MathWorld或维基百科上的任何来源(例如http://mathworld.wolfram.com/RotationFormula.html)。在Java中,您的精灵可能会在一个旋转的框架中呈现,使用AffineTransform类,所以如果您仔细应用变换,甚至可能不需要自己进行额外的数学计算来获得尾点的位置。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接