Java:按指定的角度值围绕另一个点旋转点

2023-12-10

我试图将 java 中的 2D 点围绕另一个具有指定度数值的点旋转,在本例中只是围绕点 (0, 0) 旋转 90 度。

Method:

public void rotateAround(Point center, double angle) {
    x = center.x + (Math.cos(Math.toRadians(angle)) * (x - center.x) - Math.sin(Math.toRadians(angle)) * (y - center.y));
    y = center.y + (Math.sin(Math.toRadians(angle)) * (x - center.x) + Math.cos(Math.toRadians(angle)) * (y - center.y));
}

预期 (3, 0):X = 0,Y = -3

返回 (3, 0):X = 1.8369701987210297E-16,Y = 1.8369701987210297E-16

预期 (0, -10):X = -10,Y = 0

返回 (0, -10):X = 10.0,Y = 10.0

是方法本身有问题吗?我将该功能移植自(在 Lua 中旋转 2D 点 - GPWiki)到爪哇。

EDIT:

做了一些性能测试。我没想到会这样,但矢量解决方案赢了,所以我将使用这个。


如果您有权访问java.awt, 这只是

double[] pt = {x, y};
AffineTransform.getRotateInstance(Math.toRadians(angle), center.x, center.y)
  .transform(pt, 0, pt, 0, 1); // specifying to use this double[] to hold coords
double newX = pt[0];
double newY = pt[1];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:按指定的角度值围绕另一个点旋转点 的相关文章

随机推荐