library(rgl)
# zの極座標用の角度パラメタ
theta<-seq(from=0,to=2*pi,length.out=100)
# zの極座標用のノルムパラメタ
r<-seq(from=0,to=1,length.out=10)
# ノルムと角度を組み合わせる
xy<-expand.grid(r,theta)
plot(xy[,1],xy[,2])
# 極座標からカルテシアンに変換
x<-xy[,1]*cos(xy[,2])
y<-xy[,1]*sin(xy[,2])
plot(x,y)
# 2値のy(ここではz1とz2)は、極座標的には、ノルムの平方根と角度が半分か、半分+piなので
# それに基づいて、二つの値を出す
z1<-sqrt(xy[,1])*cos(xy[,2]/2)
z2<-sqrt(xy[,1])*cos(xy[,2]/2+pi)
# プロットするために、定義域をタンデムに重複させ、値域は2価のそれをタンデムにつなぐ
xx<-c(x,x)
yy<-c(y,y)
zz<-c(z1,z2)
#
plot3d(xx,yy,zz, col=rainbow(1000))
X <- par3d("userMatrix")
movie3d( par3dinterp( userMatrix=list(X,rotate3d(X, pi/2, 1, 0, 0),rotate3d(X, pi/2, 0, 1, 0) )), duration=5 ,movie="test2",dir=".")
- トーラスは次の複素関数に対応する(ただし、無限遠点の扱いが射影幾何的になっている
theta<-seq(from=0,to=2*pi,length.out=100)
r<-seq(from=0,to=1,length.out=10)
xy<-expand.grid(r,theta)
plot(xy[,1],xy[,2])
x<-xy[,1]*cos(xy[,2])
y<-xy[,1]*sin(xy[,2])
plot(x,y)
# 複素関数の係数を複素数で与える
# こちらの例では、Rの複素数を使ってみる
a<-complex(real=0.1,imaginary=0.2)*4 # 係数を変えると、「つながる点」が変わるので*4(4倍)してみたりしている
b<-complex(real=0.2,imaginary=0.3)
c<-complex(real=0.4,imaginary=0.5)
# 格子点を複素数で表す
d<-complex(real=x,imaginary=y)
e<-(d-a)*(d-b)*(d-c)
plot(Re(d),Im(d))
# 複素数を使えば、sqrt(f(z))も簡単
z1<-sqrt(e)
z2<--sqrt(e)
# 2価なのでタンデムにつなぐ
xx<-c(Re(d),Re(d))
yy<-c(Im(d),Im(d))
zz<-c(Re(z1),Re(z2))
plot3d(xx,yy,zz, col=rainbow(1000))
X <- par3d("userMatrix")
movie3d( par3dinterp( userMatrix=list(X,rotate3d(X, pi/2, 1, 0, 0),rotate3d(X, pi/2, 0, 1, 0) )), duration=5 ,movie="test2",dir=".")