给定角度和距点的距离,求坐标

问题描述

我正在尝试通过计算给定点 (Xo,Yo)、距离和角度的最后一个点 (X,Y) 在 android 画布上绘制线条。示意图如下:

enter image description here

我正在使用以下公式根据磁传感器和加速度计值计算方位角方向

            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;
        }

我面临的问题是线条的绘制方向不正确。无论定向方向如何,它都会朝任何方向前进。我得到如下所示的内容

enter image description here

根据我的分析,考虑到方向度,线没有被准确绘制。我相信这是与 Android 坐标系有关的东西。如果有人能帮助我计算任何方向 [0-360] 的准确定向度,我将不胜感激。

是否有不同的公式来计算圆轴每个象限中的最后一个点(X,Y)?

解决方法

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