Java:按指定的度数值旋转另一个

时间:2012-04-03 00:06:33

标签: java geometry rotation 2d point

我正在尝试使用指定的度数值在java中围绕另一个旋转2D点,在这种情况下,简单地围绕点(0,0)在90度。

方法:

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

方法本身有问题吗?我将函数从(Rotating A Point In 2D In Lua - GPWiki)移植到Java。

编辑:

进行了一些性能测试。我不会这么想,但矢量解决方案赢了,所以我会用这个。

2 个答案:

答案 0 :(得分:10)

如果您有权使用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];

答案 1 :(得分:2)

在对Y值执行计算之前,您正在改变center的X值。改为使用临时点。

此外,该功能需要三个参数。你为什么只带两个?