xDroid's Blog

如何装逼地被经纬度坑

啊……那个 从新手到菜鸟的Linux教程 系列暂时先放在一边……等开学再写……

所以今天要吐槽的是什么呢?最近(半年)在写一个跑步的app,有一回突发奇想,怎么才能尽量准确地统计用户跑了几圈呢?

要回答这个问题,首先要明白什么是“跑了几圈”,也就是“圈”的定义是什么。

有人会说:“那还不简单,我绕着中心转了多少就能算出跑了几圈嘛。”

![/微信微笑](/images/2016-08-tricked-by-coordinates-system-of-earth/Screenshot from 2016-08-14 11-51-44.jpg)

中心取的位置,对于圈数计算会有不同的结果。这一点学过复变函数的同学们应该很容易明白的。

不过我们暂且按下这一点不作讨论;姑且认为中心取在所有测量点的重心位置。在这种假设下,依然还有很多种办法。比较自然的想法是:用atan2函数算出两点与中心连线转过的角度。

![](/images/2016-08-tricked-by-coordinates-system-of-earth/Screenshot from 2016-08-14 12-03-05.jpg)

但是!!!

这样的程序员和咸鱼有什么区别呢!!!

所以我灵机一动:

对应离散的情况就是

中二气息是不是瞬间爆表?

然后我就试了一下以前跑过的数据,似乎没有什么问题。
不过,为什么逆时针跑出来的圈数
是负的啊!

上学期才刚学过复变函数的我(眉头一皱,感觉事情没有这么简单),看来是轮子造得有问题。

Java居然连Complex类都没有

然而,当我检验了一下1/z的积分时候,发现轮子好像造得没有问题。

???

想了很久,终于查了一下latitude和longitude的意思,然后发现

![](/images/2016-08-tricked-by-coordinates-system-of-earth/Screenshot from 2016-08-14 13-33-14.jpg)

TM在这个坐标下xy轴关系和正常复平面中的关系是正好相反的!所以顺时针走积分值就是正的了。

郁闷至死。