Java简单旋转点

时间:2013-04-06 17:12:34

标签: java rotation affinetransform

我正在尝试使用此方法旋转一个点:

 AffineTransform at = AffineTransform.getRotateInstance(Math.toRadians(90), 1, 2);
 double[] pt = {0, 1};
 at.transform(pt, 0, pt, 0, 1);
 int x = (int)pt[0];
 int y = (int)pt[1];

预期结果为x=0y=3因为我们正在顺时针旋转90 *,但输出目前是x=2y=1;

为什么我没有得到预期的结果?

2 个答案:

答案 0 :(得分:3)

该计划没有做错任何事。通过将Math.toRadians(90)指定为theta,您指示它逆时针旋转,而不是顺时针旋转。这就是如何用三角函数定义旋转。

使用-Math.toRadians(90)可以获得正确的结果。

另外,作为旁注,将点值转换为int并不是检查代码的最佳选择。双精度三角函数容易出现非常小的误差,因此错误方向的微小碰撞会导致错误的整数。 (即,2.99999999995将被投射到2)

(int) Math.round(value)更安全

答案 1 :(得分:2)

实际上,你是逆时针旋转的。 Javadoc说:

  

以正角度θ旋转,使正X轴上的点朝向正Y轴旋转

请参阅the Javadoc