c# - 获取两个标题之间的区别

标签 c# compass-geolocation 360-degrees

我有这种方法可以找出 2 0-360 罗盘航向之间的差异。

虽然这有助于确定我的绝对偏差(例如,始终为正输出),但我无法确定需要做什么才能将符号引入输出。

理想情况下,如果从初始航向到最终航向的最短距离是顺时针方向,我希望 error 具有正号,如果航向之间的最短距离涉及逆时针旋转,我希望 error 有一个负号。

所需输入/输出的几个例子

初始 -- 最终 -- 错误

0 ................... 30 ......... 30

30 ..................... 0 ..................... -30

360 ..................... 1 ..................... 1

1 ..................... 360 ..................... -1

代码:

    /// <summary>
    /// Calculate the error from a given initial heading to a final heading
    /// </summary>
    /// <param name="inital"></param>
    /// <param name="final"></param>
    /// <returns></returns>
    private double GetHeadingError(double initial, double final)
    {
        double directionA = final - initial;
        double directionB = 360 - (final + initial);
        double error = 0;

        if (Math.Abs(directionA) < Math.Abs(directionB))
        {
            error = directionA;
        }
        else
        {
            error = directionB;
        }

        return error;
    }

最佳答案

编辑:添加了对差值恰好为 180 度的检查。以前这是返回 180 或 -180,具体取决于最终值是大于还是小于初始值。我对其进行了修改,使其在两种情况下都返回正值 180。


所以这是我的尝试......

private static double GetHeadingError(double initial, double final)
        {
            if (initial > 360 || initial < 0 || final > 360 || final < 0)
            {
                //throw some error
            }

            var diff = final - initial;
            var absDiff = Math.Abs(diff);

            if (absDiff <= 180)
            {
                //Edit 1:27pm
                return absDiff == 180 ? absDiff : diff;
            }

            else if (final > initial)
            {
                return absDiff - 360;
            }

            else
            {
                return 360 - absDiff;
            }
        }

关于c# - 获取两个标题之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5024375/

相关文章:

c# - 根据用户输入以编程方式创建 Hangfire cron 表达式

android - 为什么我需要摇动手机才能获得正确的 "Compass-Data"?

Android加速度计,传感器使用和功耗

android - 指南针和加速度计精度

image - 内向360度照片

c# - 以编程方式更改应用栏图标

c# - 如何将字符串转换为颜色?对于 Windows Phone C#

ffmpeg - ffmpeg 是否有鱼眼或双鱼眼等距柱状滤波器?

c# - 无法完全使用 WebBrowser 控件捕获网页

ios - 嵌入Youtube 360​​视频在iOS Safari中不起作用