ただのメモ

他の人に見せても良い方のメモ

球面幾何学

地球は楕円球っぽいが、球とする。

地球上の2点間を動く時、最短距離で行きたい時がある。

その距離を求める時、平面幾何ではダメで、球面幾何を考えるべき。

そこで、球面幾何学を学んでみたい。

始めましょうか。

  • 球面幾何学
    • 緯度、経度、2点間の距離
      • 緯度と経度を与えると一点が決まる
        • 半径固定
        • 対蹠点も決まる
          • 反対側の点
      • 点を決めたら、次は点と点の関係を知りたい
        • 今回は距離
      • 距離
        • 2点を通る大円の短い方の弧の長さ
          • 大円
            • 中心を通る平面によるこの球の切り口の円
        • 2点の距離は、2点の内積を半径の二乗で割ったもの
        • 弧を含む扇のなす角度

少し脱線する。

class Dot:
  def __init__(self,a,b):
    self.lat = a
    self.lon = b

from math import radians,cos, sin,acos
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]
  return acos(ans)

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

  return acos(ans/(div1*div2))

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))
        • 4つの点の関係を知りたい
          • 四角形の面積
          • 三角形分割
            • 最小単位を考える。 
    • 球面における三角法
      • 余弦定理
        •  cos(c) = cos(a)cos(b) + sin( a)sin(b) cos(C)
      • 正弦定理
        •  sin(A)/sin(a) = sin(B)/sin(b) = sin(C)/sin(c)
      • 球面上で、
        • 直角二等辺三角形を作る
        • その時、斜辺は、他の辺の \sqrt{2}倍よりも小さくなる。
          • 球面の曲率が影響している。
    • 工業立地論
      • Steiner-Weber問題
        •  ax+by+cz の最小化
    • 球面とユークリッド原論
    • 直線外の点と直線上の点との関係
      • 線分を見込む角度
      • 正弦定理、余弦定理を駆使する

バイバイ!