问题描述
我正在尝试通过计算给定点 (Xo,Yo)、距离和角度的最后一个点 (X,Y) 在 android 画布上绘制线条。示意图如下:
我正在使用以下公式根据磁传感器和加速度计值计算方位角方向
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;
}
我面临的问题是线条的绘制方向不正确。无论定向方向如何,它都会朝任何方向前进。我得到如下所示的内容:
根据我的分析,考虑到方向度,线没有被准确绘制。我相信这是与 Android 坐标系有关的东西。如果有人能帮助我计算任何方向 [0-360] 的准确定向度,我将不胜感激。
是否有不同的公式来计算圆轴每个象限中的最后一个点(X,Y)?
解决方法
我相信您观察到的行为是由于您的方位角以度为单位,而三角函数需要弧度。您可以使用 Math.toRadians
将度数转换回弧度。但是,我会坚持在任何地方使用弧度并取消调用 Math.toDegrees
(并停止四舍五入)。