たわみを円で吸収する

  • たとえば、たわみを円弧にすることで吸収するような仕組みのとき
L<-1
a<-1

fx<-function(x,a){
	x/sin(x)-a
}
interval<-c(0,pi/2)
uniroot(fx,interval=c(10^(-10),pi/2),a=1.1)

X<-1
Y<-1

Ny<-100
Nx<-100

ys<-seq(from=0,to=1,length=Ny)*Y
Xs<-Ys<-Zs<-c()
Ls<-a*ys+L

for(i in 1:Ny){
	L2<-Ls[i]
	if(L2==L){
		Xs<-c(Xs,seq(from=0,to=1,length=Nx)*X)
		Ys<-c(Ys,rep(ys[i],Nx))
		Zs<-c(Zs,rep(0,Nx))
	}else{
		t<-uniroot(fx,interval=c(10^(-10),pi/2),a=L2/L)[[1]]
		ts<-seq(from=-t/2,to=t/2,length=Nx)
		r<-L/(2*sin(t/2))
		Xc<-L/2
		Zc<-L/2/tan(t/2)
		Ys<-c(Ys,rep(ys[i],Nx))
		Xs<-c(Xs,r*sin(ts)+Xc)
		Zs<-c(Zs,r*cos(ts)-Zc)
	}
}
xlim<-ylim<-zlim<-range(c(Xs,Ys,Zs))
plot3d(Xs,Ys,Zs,xlim=xlim,ylim=ylim,zlim=zlim)
  • ここでは、たわんでできる最長弧は半円なので、それより長くするためには、さらにたわむ必要が出る
  • 円弧である条件を残して、x座標に2個以上のz値を取れない制約をいれるとすれば、z上下反転の円弧を繰り返すことになるだろう
  • そしてそのときの上下反転回数は、もっとも反転数を多く必要とするy座標が決めて、その他のy座標はその上下反転パターンに従属するだろう
  • 円弧でないとすれば、ソリトンのところでやった曲線の折り畳み(こちら)などが参考になってくるだろう

http://d.hatena.ne.jp/images/diary/r/ryamada22/2010-12-19.gif