2013-04-06 87 views
1

我试图用这个方法来旋转点:简单的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=0y=3,因为我们是在旋转90 *顺时针,但是输出是目前x=2y=1;

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

回答

3

程序没有做错什么。通过指定Math.toRadians(90)作为theta,您指示它逆时针旋转,而不是顺时针旋转。这就是三角法定义旋转的方式。使用-Math.toRadians(90)会得到正确的结果。另外,作为附注,将点值转换为int不是检查代码的最佳方法。双精度三角函数容易出现很小的误差,所以在错误的方向上出现一个小小的凹凸会导致错误的整数。 (即2.99999999995将被转换为2)

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

+0

我想这是一些简单的 – 2013-04-06 17:31:00

+0

所以我需要在pt [0]和pt [1]上使用Math.Round - 在其他地方? – 2013-04-06 17:32:46

2

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

用正角度theta进行的旋转朝向Y轴正正X轴旋转点

the Javadoc