我试图在android画布上通过计算最后一个点(x,y)来画线,给出一个点(xo,yo),距离和Angular 。图示如下:
我是用下面的公式从磁传感器和加速度计的值计算方位角
if (accelValues != null && magnetValues != null) {
float rotation[] = new float[9];
float orientation[] = new float[3];
if (SensorManager.getRotationMatrix(rotation, null, accelValues, magnetValues)) {
SensorManager.getOrientation(rotation, orientation);
float azimuthDegree = (float) (Math.toDegrees(orientation[0]) + 360) % 360;
orientationDegree = Math.round(azimuthDegree);
}
}
我正在保存数组中的所有行,然后调用ondraw重新绘制画布。下面是我的代码为ondraw和计算步骤,以便它重新绘制的每一步,用户正在采取取决于他的方向线(假设距离长度为60)
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
drawRotateImage(canvas);
canvas.drawPoint(Position.x_axis, Position.y_axis, paint);
for (Line l : listLine) {
canvas.drawLine(l.StartX, l.StartY, l.EndX, l.EndY, paint);
}
private void stepDetector () {
l = new Line();
l.setStartX(lastX);
l.setStartY(lastY);
l.setOrientationDegree(orientationDegree);
lineX = (float) (lastX + (60 * cos(orientationDegree)));
lineY = (float) (lastY + (60 * sin(orientationDegree)));
l.setEndX(lineX);
l.setEndY(lineY);
listLine.add(l);
System.out.println ("" + l.toString());
invalidate();
lastX = lineX;
lastY = lineY;
}
我面临的问题是,这些线没有画出正确的方向。无论方向如何,它都是朝任何方向运动。我得到如下结果:
据我所分析,这条线并没有被准确地画出来,因为方向是灰色的。我相信这是和安卓坐标系有关的东西。如果有人能帮我计算出任何方向上的准确方位角[0-360],我将不胜感激。
是否有不同的公式来计算圆轴每个象限的最后一个点(x,y)?
1条答案
按热度按时间agxfikkp1#
我相信你所观察到的行为是由于你的方位角是度,而三角函数期望的是弧度。你可以使用
Math.toRadians
. 不过,我会坚持在任何地方都使用弧度,而不打电话Math.toDegrees
(不要再绕了)。