我正在尝试使用此方法旋转一个点:
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=0
和y=3
因为我们正在顺时针旋转90 *,但输出目前是x=2
和y=1
;
为什么我没有得到预期的结果?
答案 0 :(得分:3)
该计划没有做错任何事。通过将Math.toRadians(90)
指定为theta,您指示它逆时针旋转,而不是顺时针旋转。这就是如何用三角函数定义旋转。
使用-Math.toRadians(90)
可以获得正确的结果。
另外,作为旁注,将点值转换为int
并不是检查代码的最佳选择。双精度三角函数容易出现非常小的误差,因此错误方向的微小碰撞会导致错误的整数。 (即,2.99999999995将被投射到2)
(int) Math.round(value)
更安全
答案 1 :(得分:2)