简单的Java的左右旋转点
问题描述:
我试图用这个方法来旋转点:简单的Java的左右旋转点
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
;
为什么我没有得到预期的结果?
答
程序没有做错什么。通过指定Math.toRadians(90)
作为theta,您指示它逆时针旋转,而不是顺时针旋转。这就是三角法定义旋转的方式。使用-Math.toRadians(90)
会得到正确的结果。另外,作为附注,将点值转换为int
不是检查代码的最佳方法。双精度三角函数容易出现很小的误差,所以在错误的方向上出现一个小小的凹凸会导致错误的整数。 (即2.99999999995将被转换为2)
(int) Math.round(value)
是更安全
我想这是一些简单的 – 2013-04-06 17:31:00
所以我需要在pt [0]和pt [1]上使用Math.Round - 在其他地方? – 2013-04-06 17:32:46