Rで幾何 Rで数学の色々をいじってみる

  • こちら複素数を使ったユークリッド幾何について書かれている
  • シンデレラ(こちら)というソフトの良さはソフトの背後で複素数を使っているから、厳密だという話しを読んだことがある
  • Rでやってみる
  • 三角形の内角の和が\piであること

Np<-3

#p<-complex(real=c(1,0,-1),imaginary=c(0,1,0))
p<-complex(real=runif(Np),imaginary=runif(Np))
xlim<-ylim<-range(c(Re(p),Im(p)))

plot(p,col=c(1,2,3),cex=3,pch=20,xlim=xlim,ylim=ylim)
st<-seq(Np)
end<-st[c(2:Np,1)]
segments(Re(p[st]),Im(p[st]),Re(p[end]),Im(p[end]))

zABC<-(p[1]-p[2])/(p[3]-p[2])
zBCA<-(p[2]-p[3])/(p[1]-p[3])
zCAB<-(p[3]-p[1])/(p[2]-p[1])
angleABC<-Arg(zABC)
angleABC

angleBCA<-Arg(zBCA)
angleCAB<-Arg(zCAB)

sum(angleABC,angleBCA,angleCAB)

zABC*zBCA*zCAB
Arg(zABC*zBCA*zCAB)
  • 楕円と双曲線
    • こちら
      • 「A,Bを焦点とする楕円の定義は、Aからの距離とBからの距離の和が一定である点の軌跡」と
      • |z-A|+|z-B|=k
      • 「A,Bを焦点とする双曲線の定義は、Aからの距離とBからの距離の差が一定である点の軌跡」と
      • |z-A|-|z-B|=k

x<-y<-seq(from=-20,to=20,length=100)
xy<-expand.grid(x,y)
z<-complex(real=xy[,1],imaginary=xy[,2])
#a<-complex(real=runif(1),imaginary=runif(1))
#b<-complex(real=runif(1),imaginary=runif(1))
a<-complex(real=1,imaginary=1)
b<-complex(real=5,imaginary=-3)
k.col.daen<-Mod(z-a)+Mod(z-b)
k.col.soukyokusen<-Mod(z-a)-Mod(z-b)

K.d<-20
K.s<-3
par(mfcol=c(1,2))
col.daen<-k.col.daen>K.d
col.soukyokusen<-abs(k.col.soukyokusen)>K.s
#plot(z,col=gray((k.col-min(k.col))/(max(k.col)-min(k.col))),cex=0.5)
plot(z,col=col.daen,cex=0.5)
plot(z,col=col.soukyokusen,cex=0.5)
par(mfcol=c(1,1))