【发布时间】:2021-01-05 07:54:02
【问题描述】:
我试图通过计算给定点 (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)是否有不同的计算公式?
【问题讨论】:
标签: java android trigonometry