欢迎光临散文网 会员登陆 & 注册

S5G4 球上的大圆路径

2022-02-26 14:52 作者:学用数学  | 我要投稿

从北京飞到纽约可不是要飞越太平洋,而是要经过北极圈。这可不是因为怕飞机掉到太平洋中,而是因为这是走球面上两点最近的的大圆路径。对于这类立体几何问题,用 GGB 呈现就直观很多。更有趣的是自己动手来做看看时,更可体会到更多数学原理。

 

你将学会

  1. 球面极坐标的观念

  2. 站在巨人肩膀上,学会改编优良作品

  3. 了解球面上的地图是由很多折线段构成

  4. 利用序列来绘制经纬线

  5. 利用叉积来取得球面上的大圆

  6. 将球面上xyz坐标转换为极坐标


学习指引

二、地球上的经纬度如何解读

在探究球面上大圆的距离前,先来认识所谓的经纬度的到底是指那些角度?


问:如何确定  E 116°、 N 40°  的位置?

答:可从赤道与本初子午线的交会点 A,沿着赤道往东 116°,再往北移动 40° ,所到的位置就是  E 116°、 N 40°。



三、参考他人作品

在 GGB 的最佳学习资料就是 GGB 官网,上面有很多优秀作品。我第一次看到 GGB 上刻画着世界地图时,也觉得很神奇,这到底如何做到的。而要解决这个困惑,其实就是打开他人作品观看源代码。接着在一步步拆解反思他人的指令到底是什么意思,就可学到很多技巧。



问:如何画出地球上的地图?

答:这些地图,主要是有很多折线来完成。而这些折线的档案主要取至自于 Rafael Losada Liste 的作品。 https://ggb123.cn/m/uT3czZnE

他在这系列的第二、三个作品都很精美,鼓励大家去研究。本文只先利用他第一个地图的基础来发展练习。


问:如何解读这些折线?

答:这个地图共有 206 个折线档案,我们先来看其中一小段折线。以台湾为例,这段折线共有 9 个点。其中开头与结尾都是 (5;2.125;0.426) ,所以连成一个封闭曲线。

Taiwan = 折线((5; 2.125; 0.426), (5; 2.115; 0.398), (5; 2.107; 0.383), (5; 2.098; 0.398), (5; 2.096; 0.411), (5; 2.106; 0.428), (5; 2.121; 0.442), (5; 2.128; 0.436), (5; 2.125; 0.426))

问:这折线的每个点是如何解读?

答:这是空间中的极坐标表示,要注意,每个坐标内用 ;来隔开。


问:如何找到台湾的折线的呢?

答:首先,台湾的最北端为富贵角大约位在 东经 121.5 , 北纬 25.25 。因此,将 121/180*3.1416 得到 2.11 , 北纬 25.25/180*3.1416=0.44 。接着在找寻 (5; 2.121 后,再去检查 第三个位置大约 0.44。可找到  (5; 2.121; 0.442) 。



四、如何绘制经纬线

 目的:利用Sequence,可以完成这些经纬线。


问:如何绘制赤道?

答:先利用 Circle 来绘制空间中的大圆,但空间中的圆要给一个垂直与圆所在平面的向量。因此先定 vy  来绘制赤道 Lat0。

vz = 向量((0,0,1))

R = 5

Lat0 = 圆周(O,R,vz)

问:如何绘制经线?

答:先绘制个子午线,再将这个大圆绕z轴旋转。

vy = 向量((0,1,0))

Long0 = 圆周(O,R,vy)

Longs = 序列(旋转(Long0, pi/6*k, 直线(O,vz)),k,0,5)



问:如何绘制纬线?

答:每条纬线所对应圆的圆心与半径都不相同。因此先绘制球心 Os,接着再设定半径 Rs,再利用这些圆心与半径画纬线 Lats。

Os = 序列((0,0, R*sin(pi/6 *k)),k,-2,2)

Rs = 序列(R*cos(pi/6*k),k,-2,2)

Lats = 序列(圆周(Os(k), Rs(k), 直线(O,vz)), k, 1,5)


五、如何绘制大圆

目的:大圆为通过圆心 O点,要绘制这个圆的关键在于取得O,A,B 的法向量。


问:如何取得大圆的圆弧?

答:先利用 [叉积] 取得过 O,A,B 平面的法向量,再利用此向量来绘制过 A, B的大圆。接着利用 [圆弧] 指令,就可画过大圆的圆弧。

Earth = 球面(O,R)

A = 描点(Earth)

B = 描点(Earth)

nAB = 叉积(向量(O,A),向量(O,B))

cOAB = 圆周(O,A,B)

arcOAB = 圆弧(O,A,B)


六、如何绘制过地图上中点的小圆 

目的:这题的关键在于取得 A,B 两点的经纬度坐标。


问:如何取得经纬度坐标?

答:利用反三角函数。纬度为 asin(z/R),  经度为 atan(y/x)

LongA = atand(y(A)/x(A))

LatA = asind(z(A)/R)

LongB = atand(y(B)/x(B))

LatB = asind(z(B)/R)

LongM = (LongA+LongB)/2 

LatM =  (LatA+LatB)/2

M = (R;LongM;LatM) 

问:为何上面取得的经纬度来计算中点 M 时,不一定会出现在两点中间?

答:因为反三角函数的值域的限制,这时通过 [如果] 来将角度调整为 -180 到 180。这时获得正确的位置后,就可用 [三点圆弧] 来绘制圆弧。

LongAp = 如果(x(A) > 0, atand(y(A) / x(A)), 如果(y(A) > 0, 180° + atand(y(A) / x(A)), -(180°) + atand(y(A) / x(A))))

LongBp = 如果(x(B) > 0, atand(y(B) / x(B)), 如果(y(B) > 0, 180° + atand(y(B) / x(B)), -(180°) + atand(y(B) / x(B))))

LongMp = 如果(abs(LongAp - LongBp) < π, (LongAp + LongBp) / 2, (LongAp + LongBp) / 2 + 180°)

Mp = (R;LongMp;LatM)cArcAMB =三点圆弧(A,Mp,B)


小结

基于上面结果,大家可尝试增加些复选框,并试着利用地球半径 6371 来模拟地球上两点的大圆距离。


相关链接

【GGB】https://ggb123.cn/classic/uvvgrqjv

【Bili】https://www.bilibili.com/video/bv1pk4y167d6


S5G4 球上的大圆路径的评论 (共 条)

分享到微博请遵守国家法律