- 3次元空間の直線を考える
- 直線上の2点のユークリッド座標を決めれば、その直線上の点の座標を計算することができる
- 別の方法で直線に座標を与えたい
- 2点のユークリッド座標の代わりに、その斉次座標を考える
- この2点は、と4つの値の組で表現できる
- 射影幾何的には、が等しい点の集合が原点を通る4次元空間の直線ともみなせる
- 今、3次元空間の2点を通る直線を考えると、第1点の自由度は3、方向ベクトルを定めると、自由度は2なので、併せて自由度は5
- 斉次座標的に自由度5のものを定めるには、6つの値の組であればよいことになる
- その作り方が以下のようになる
- なる2x2行列を6個、作る
- それぞれの2x2座標の行列式 の値を取ると、6個の値が作れる
- 並べ方は。ただし、は、の行列式になっている
- この6個の値の組をPlucker 座標と言う
- また、この6個の値の組の代わりになる2x2行列を16個、作り、4x4行列の成分とする
- その4x4行列の成分とすると、対角成分は0で、反対称行列になる。したがって、情報は冗長で、あくまでも6つの値で決まる行列であるが、反対称行列が出てくるところが、団代数的。
- ちなみに、この直線をある2点の斉次座標から定めたが、別の2点のペアから始めても、得られる6つの値の組は「同じようなもの」にならなければ、この方法がうまく行っていることにはならない
- 別の2点の斉次座標は、最初の2点の斉次座標の線形和で表される(射影幾何のルール)。しかも線形独立
- そのような別の2点の斉次座標から、2x2行列を取り出してその行列式を計算すると、元の対応する行列式にある値をかけたものになっており、その「ある値」は、2x2行列の取り出し方によらず同じである(ちなみにその「ある値」は、はじめの2点の斉次座標を並べた4x2行列Mと、別の2点の4x2行列M’との間に、と言う関係がある(ただしは2x2行列)ときの、の行列式になっている。これは、正方行列が積の関係のとき、であることからわかる
- このと表せることが、「別の2点の斉次座標は、元の2点の斉次座標の線形和」ということ
- この意味で、6つの値のペアは、どんな2点をとっても、その比は同じと言う意味で斉次座標的な性質になっている
- ちなみに、Plucker 座標系は、グラスマン座標系の特別な場合(Mathwordlの記事参照)
- グラスマン多様体は、n次元空間に張られる、0,1,2,...,n次元線形部分空間を全部ひっくるめたもの
- 特定のk次元部分空間をまとめたものをG(k,n)と書く
- このとき、個の、det(kxk行列)がグラスマン多様体
- Plucker座標は、k= 2のときで、3次元空間の場合は、n=3だから、だから、6変数座標
my.plucker <- function(x0,y0){
X0 <- c(1,x0)
Y0 <- c(1,y0)
M0 <- cbind(X0,Y0)
p.id <- rbind(c(1,2),c(1,3),c(1,4),c(3,4),c(4,2),c(2,3))
p0 <- rep(0,6)
for(i in 1:6){
tmp <- M0[p.id[i,],]
p0[i] <- det(tmp)
}
p0
}
my.plucker.matrix <- function(M0){
p.id <- rbind(c(1,2),c(1,3),c(1,4),c(3,4),c(4,2),c(2,3))
p0 <- rep(0,6)
for(i in 1:6){
tmp <- M0[p.id[i,],]
p0[i] <- det(tmp)
}
p0
}
x0 <- rnorm(3)
y0 <- rnorm(3)
p0 <- my.plucker(x0,y0)
p0
t <- rnorm(2)
x1 <- x0 + t[1] * (y0-x0)
y1 <- x0 + t[2] * (y0-x0)
p1 <- my.plucker(x1,y1)
p1
p1/p0
M0 <- cbind(c(1,x0),c(1,y0))
n.pt <- 100
ps <- matrix(0,n.pt,6)
Lambdas <- list()
for(i in 1:n.pt){
tmp <- matrix(rnorm(4),2,2)
Lambdas[[i]] <- tmp
Mtmp <- M0 %*% tmp
ps[i,] <- my.plucker.matrix(Mtmp)
}
ratio.rows <- apply(log(abs(ps)),2,diff)
range(apply(ratio.rows,1,diff))