【问题标题】:Find the coordinate given the angle and distance from a point在给定角度和距点的距离的情况下找到坐标
【发布时间】: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


    【解决方案1】:

    我相信您观察到的行为是由于您的方位角以度为单位,而三角函数需要弧度。您可以使用Math.toRadians 将度数转换回弧度。但是,我会坚持在任何地方都使用弧度并取消调用 Math.toDegrees(也停止四舍五入)。

    【讨论】:

      猜你喜欢
      • 2011-05-30
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      相关资源
      最近更新 更多