处理浮动/双打中的微小变化

本文关键字:变化 处理 | 更新日期: 2023-09-27 18:25:25

过去的几天充满了计算和公式,我开始失去理智(有点)。所以现在我向你们寻求一些见解/帮助。

问题来了;我正在使用蓝牙信标,这些信标被放置在建筑物的整个楼层,以制作室内GPS展示。您可以使用手机连接这些信标,从而从中接收您的经纬度位置。这些数字是大的浮动/双变量,看起来像这样:

  • 电话:52.501288451787076
  • 液化天然气:6.079107635606511

实际变化发生在该点之后的第4和第5位置。我正在使用将这些数字转换为笛卡尔坐标系;

  • x=R*cos(lat)*cos(lon)
  • z=R*sin(lat)

现在,这个转换得到的坐标是实心的。它们是我可以使用的数字。我在3d引擎(Unity3d)中使用它们来制作实时地图,在那里你可以看到有人在走。

现在来解决实际问题!这些信标并不完全准确。即使你放下手机,这些数字也会上下跳动。范围从,让我们假设与上面提到的纬度相同,52.501280到52.501296。如果我们将其转换为三维引擎中的坐标,则用户的"化身"会从一个位置跳到另一个位置(小跳跃比大跳跃多)。

应对这些跳跃数字的好方法是什么?我试着检查是否有大的跳跃,但忽略了这些,但跳跃仍然太大了。更广泛的检查将导致几乎没有移动,即使手机在移动。或者有更好的方法来转换lat和long变量,以便在3d引擎中使用吗?

如果有人和我有同样的问题,一些数学奇迹,谁能给出一个很好的转换/公式,或者有人知道我可能做错了什么,那么请帮助一位程序员同事。

处理浮动/双打中的微小变化

移动平均线

你可以使用这个:(拍摄于此:https://stackoverflow.com/a/1305/5089204)

注意:请阅读对此类的评论,因为此实现存在一些缺陷。。。这只是为了快速测试和展示。。。

    public class LimitedQueue<T> : Queue<T> {
        private int limit = -1;
        public int Limit {
            get { return limit; }
            set { limit = value; }
        }
        public LimitedQueue(int limit)
            : base(limit) {
            this.Limit = limit;
        }
        public new void Enqueue(T item) {
            if (this.Count >= this.Limit) {
                this.Dequeue();
            }
            base.Enqueue(item);
        }
    }

测试如下:

        var queue = new LimitedQueue<float>(4);
        queue.Enqueue(52.501280f);
        var avg1 = queue.Average(); //52.50128
        queue.Enqueue(52.501350f);
        var avg2 = queue.Average(); //52.5013161
        queue.Enqueue(52.501140f);
        var avg3 = queue.Average(); //52.50126
        queue.Enqueue(52.501022f);
        var avg4 = queue.Average(); //52.5011978
        queue.Enqueue(52.501635f);
        var avg5 = queue.Average(); //52.50129
        queue.Enqueue(52.501500f);
        var avg6 = queue.Average(); //52.5013237
        queue.Enqueue(52.501505f);
        var avg7 = queue.Average(); //52.5014153
        queue.Enqueue(52.501230f);
        var avg8 = queue.Average(); //52.50147

有限的队列不会增长。。。您只需定义要使用的元素数(在本例中,我指定了4个)。第五个元素推出第一个等等…

平均值总是平滑滑动:-)