我正在尝试使用指定的度数值在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。
编辑:
进行了一些性能测试。我不会这么想,但矢量解决方案赢了,所以我会用这个。
答案 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值。改为使用临时点。
此外,该功能需要三个参数。你为什么只带两个?