- 座標の取り方をいじるとぐっと簡単になるのでそうする
- 斉次座標という
- 1次元の座標を、2つの数値を使ってで表す
- という関係にする
- の点は無限遠点になる
- 2次元の点もをとする。次元が上がっても同様
- この斉次座標を使うと、射影直線による射影変換が
- となって
- と書くより簡単だし、本質的
my.projection.transform2 <- function(x,M){
X <- c(x,1)
X. <- M %*% X
x. <- X.[1]/X.[2]
x.
}
M <- matrix(c(1,1,1,1),2,2)
x <- c(1)
n <- 50
xs <- rep(0,n)
xs[1] <- x
for(i in 2:n){
xs[i] <- my.projection.transform2(xs[i-1],M)
}
plot(xs)
M <- matrix(c(1,0,1,1),2,2)
x <- c(1)
n <- 50
xs <- rep(0,n)
xs[1] <- x
for(i in 2:n){
xs[i] <- my.projection.transform2(xs[i-1],M)
}
plot(xs)
M <- matrix(c(6,-2,2,1),2,2)
x <- c(0.001)
n <- 50
xs <- rep(0,n)
xs[1] <- x
for(i in 2:n){
xs[i] <- my.projection.transform2(xs[i-1],M)
}
plot(xs)
M <- matrix(rnorm(4),2,2)
x <- c(0.001)
n <- 50
xs <- rep(0,n)
xs[1] <- x
for(i in 2:n){
xs[i] <- my.projection.transform2(xs[i-1],M)
}
plot(xs,type="l")
- 行列の4成分、a,b,c,dによるの正負、ゼロが不動点数を決めるので、それに応じて色々な射影変換が得られる
n.iter.sq <- 4
n.iter <- n.iter.sq^2
par(mfrow=c(n.iter.sq,n.iter.sq))
for(ii in 1:n.iter){
M <- matrix(rnorm(4),2,2)
x <- c(0.001)
n <- 50
xs <- rep(0,n)
xs[1] <- x
for(i in 2:n){
xs[i] <- my.projection.transform2(xs[i-1],M)
}
plot(xs,type="l",xlab="",ylab="",axes=FALSE)
}
par(mfrow=c(1,1))