Ptolemy の定理とPlucker 座標、小行列式、flag minor、Grassmanian(2,n)

  • 団代数をやっていると、Ptolemyの定理が出てくる
  • 三角化の団代数では、円周上の4点ABCDについて、AC x BD = AB x CD + BC x ADという辺の長さの関係により、団変数の値の関係が論じられる
  • 他方、Grassmanian(2,n) の団代数では、n角形の内部の三角化が論じられ、2行の行列Mについて、辺 i-j について、2x2行列としてM[1:2,c(i,j)]を取り出し、その行列式の間に三角化における四角形の4辺と2つの対角線に相当する行列式の関係が持ち出される
  • もし、Grassmanian(2,n)のn角形を単位円周上に取れば、この行列式は、長さ1のベクトルに関する(x1y2 - x2y1)なる計算式で表されるが、これはcos(t1)sin(t2)-cos(t2)sin(t1) = sin(t2-t1)となっていて、これは、2ベクトルが作る平行四辺形の面積に相当するが、これが、円周上の2点を結ぶ長さとも関連する、ということで、円周上4点の頂点間距離と行列式とが同じものを表していることが解る
  • そんな具合に、団代数のPtolemy定理は形を変えて現れる
  • ちなみに、行列式では \sin{t1-t2}が現れ、トレミーの定理では\sqrt{2 - 2\times \cos{t1-t2}}が辺・対角線の長さになっており、値自体は異なるが、団変異に伴う\mu \theta = \alpha \times \gamma + \beta \times \deltaの関係が、行列式でも直線の長さでも成立するというところがキモ
t1 <- runif(1)
t2 <- runif(1)
A <- c(cos(t1),sin(t1))
B <- c(cos(t2),sin(t2))
d <- sqrt(sum((A-B)^2))
d2 <- sin(t1-t2)

sqrt(2 - 2 * sqrt(1-d2^2))
d

ts <- sort(runif(4)*2*pi)

X <- rbind(cos(ts),sin(ts))

det(X[,1:2]) * det(X[,3:4]) + det(X[,2:3]) * det(X[,c(1,4)]) 
det(X[,c(1,3)]) * det(X[,c(2,4)])

L1 <- sqrt(sum((X[,1]-X[,2])^2))
L2 <- sqrt(sum((X[,2]-X[,3])^2))
L3 <- sqrt(sum((X[,3]-X[,4])^2))
L4 <- sqrt(sum((X[,4]-X[,1])^2))

L5 <- sqrt(sum((X[,1]-X[,3])^2))
L6 <- sqrt(sum((X[,2]-X[,4])^2))

L5 * L6

L1 * L3 + L2 * L4
  • 上の例では、原点を中心とした単位円周上の4点の話
  • 次に、2次元平面の任意の円周上の4点で、行列式と、辺・対角線の長さとの2つの演算が、変異に関して同様の等式を満足することを確かめる
ts <- sort(runif(4)) * 2 * pi
r <- runif(1) * 5
x0 <- rnorm(1) * 10
y0 <- rnorm(1) * 10


Vs <- r * rbind(cos(ts),sin(ts))

Vs[1,] <- Vs[1,] + x0
Vs[2,] <- Vs[2,] + y0

plot(t(Vs))

M12 <- Vs[,c(1,2)]
M23 <- Vs[,c(2,3)]
M34 <- Vs[,c(3,4)]
M14 <- Vs[,c(1,4)]

M13 <- Vs[,c(1,3)]
M24 <- Vs[,c(2,4)]

det(M13) * det(M24)
det(M12) * det(M34) + det(M23) * det(M14)

L12 <- sqrt(sum((M12[,1]-M12[,2])^2))
L23 <- sqrt(sum((M23[,1]-M23[,2])^2))
L34 <- sqrt(sum((M34[,1]-M34[,2])^2))
L14 <- sqrt(sum((M14[,1]-M14[,2])^2))

L13 <- sqrt(sum((M13[,1]-M13[,2])^2))
L24 <- sqrt(sum((M24[,1]-M24[,2])^2))

L13 * L24
L12 * L34 + L23 * L14
t <- sort(runif(4) * 2 * pi) * 10 # * 10 をしなければ、円周上に順番に並んだ点だが、それを大きく倍しても成り立つ…
sin(t[3]-t[1]) * sin(t[4]-t[2])
sin(t[2]-t[1]) * sin(t[4]-t[3]) + sin(t[3]-t[2]) * sin(t[4]-t[1])


M <- rbind(cos(t),sin(t))

d12 <- det(M[,1:2])
d13 <- det(M[,c(1,3)])
d14 <- det(M[,c(1,4)])
d23 <- det(M[,c(2,3)])
d24 <- det(M[,c(2,4)])
d34 <- det(M[,3:4])

d12 * d34 + d23 * d14

d13 * d24