我正在使用SDK7.0中的“AccelerometerDemo”,并且对从XYZ数据中提取的“旋转”的计算有疑问。
我想要完成的是一个虚拟的“钟摆”,直指向下。然而,事情正在旋转,并没有像我期望的那样移动。
以下是我的代码的一部分:
_accChannel.getLastAccelerationData(_xyz);
double roll = MathUtilities.atan2(X, Z) * 180.0 / Math.PI;
graphics.setColor(Color.BLACK);
int xcenter = 240;
int ycenter = 400;
int length = 220;
int newx1 = (int)(Math.cos( roll ) * (double)length) - xcenter;
int newy1 = (int)(Math.sin( roll ) * (double)length) - ycenter;
graphics.drawLine(xcenter, ycenter, newx1, newy1);
有什么线索我做错了吗?
提前致谢!
答案 0 :(得分:1)
我至少看到两个问题:
1。 Math.cos() and Math.sin()期望弧度中的角度输入,而非度数。使用此代码:
double roll = MathUtilities.atan2(X, Z) * 180.0 / Math.PI;
您已将roll
转换为度数。
2. 其次,您要从矢量坐标中减去中心坐标。我相信你应该添加,就像这样:
int newx1 = (int)(Math.cos( roll ) * (double)length) + xcenter;
int newy1 = (int)(Math.sin( roll ) * (double)length) + ycenter;