地球は楕円球っぽいが、球とする。
地球上の2点間を動く時、最短距離で行きたい時がある。
その距離を求める時、平面幾何ではダメで、球面幾何を考えるべき。
そこで、球面幾何学を学んでみたい。
始めましょうか。
- 球面幾何学
- 緯度、経度、2点間の距離
- 緯度と経度を与えると一点が決まる
- 半径固定
- 対蹠点も決まる
- 反対側の点
- 点を決めたら、次は点と点の関係を知りたい
- 今回は距離
- 距離
- 2点を通る大円の短い方の弧の長さ
- 大円
- 中心を通る平面によるこの球の切り口の円
- 大円
- 2点の距離は、2点の内積を半径の二乗で割ったもの
- 弧を含む扇のなす角度
- 2点を通る大円の短い方の弧の長さ
- 緯度と経度を与えると一点が決まる
- 緯度、経度、2点間の距離
少し脱線する。
class Dot:
def __init__(self,a,b):
self.lat = a
self.lon = b
def dist(s,t):
phi1 = radians(s.lat)
phi2 = radians(t.lat)
psi1 = radians(s.lon)
psi2 = radians(t.lon)
vec1 = [cos(phi1)*cos(psi1),cos(phi1)*sin(psi1),sin(phi1)]
vec2 = [cos(phi2)*cos(psi2),cos(phi2)*sin(psi2),sin(phi2)]
ans = 0
for i in range(3):
ans += vec1[i]*vec2[i]
yokohama = Dot(35.44778,139.6425)
osaka = Dot(34.68639,135.52)
kyoto = Dot(35.02139,135.75556)
print(dist(yokohama,osaka))
print(dist(kyoto,osaka))
rad = 6371
print(rad*dist(yokohama,osaka))
print(rad*dist(kyoto,osaka))
-
-
- 2点の間の関係が分かった
- 3点の間の関係を知りたい
- 三角形
- 2つの辺で挟まれた角度がわかると、三角形が確定する。
- 合同条件
- 角度の解釈
- 平面OABの法線と、平面OACの法線のなす角度
- 綺麗に角度を測れないから、間接的に真っすぐなものを持ってきて、それで測れるようにする。
- 辺ではなく、辺と中心を通る平面を見る。
-
def outer(s,t):
phi1 = s.lat
phi2 = t.lat
psi1 = s.lon
psi2 = t.lon
vec1 = [cos(phi1)*cos(psi1),cos(phi1)*sin(psi1),sin(phi1)]
vec2 = [cos(phi2)*cos(psi2),cos(phi2)*sin(psi2),sin(phi2)]
ans = [0] * 3
for i in range(3):
ans[i] = vec1[(i+1)%3]*vec2[(i+2)%3]-vec2[(i+1)%3]*vec1[(i+2)%3]
return ans
def angle(s,t,u):
ab = outer(s,t)
ac = outer(s,u)
ans = 0
for i in range(3):
ans += ab[i]*ac[i]
div1 = 0
div2 = 0
for i in range(3):
div1 += ab[i]**2
div2 += ac[i]**2
else:
div1 = div1**0.5
div2 = div2**0.5
print(angle(osaka,kyoto,yokohama))
print(angle(kyoto,yokohama,osaka))
print(angle(yokohama,osaka,kyoto))
o = 0.806099043154299
k = 2.248354615255246
y = 0.08728605303579658
from math import pi
print(rad*(o+k+y-pi))
バイバイ!