根据给定的Angular 和距离,找到坐标

sy5wg1nm  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(248)

我试图在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)?

agxfikkp

agxfikkp1#

我相信你所观察到的行为是由于你的方位角是度,而三角函数期望的是弧度。你可以使用 Math.toRadians . 不过,我会坚持在任何地方都使用弧度,而不打电话 Math.toDegrees (不要再绕了)。

相关问题