1

我正在尝试使用这种方法来旋转一个点:

 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=0andy=3因为我们顺时针旋转了 90*,但是当前的输出是x=2and y=1;

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

4

2 回答 2

3

该程序没有做错任何事情。通过指定Math.toRadians(90)您的 theta,您指示它逆时针旋转,而不是顺时针旋转。这就是三角学中旋转的定义方式。

使用-Math.toRadians(90)会给你正确的结果。

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

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

于 2013-04-06T17:27:34.843 回答
2

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

旋转正角度 theta 将正 X 轴上的点向正 Y 轴旋转

请参阅Javadoc

于 2013-04-06T17:28:00.137 回答