2012年5月11日金曜日

AsymptoteでCyclideを描く

リー微分の模式図を描きたいのですが、曲面としてトーラスよりは複雑だけれども複雑過ぎないような曲面を探していました。
このページを見ていたところ、丁度良さそうな曲面としてcyclideという曲面がありました。これは$(u, v)$を$[0, 2\pi]\times [0,2\pi]$上を動く媒介変数、$a, b, c, d$を定数として、
\[
\begin{align}
h &=  a - c \cos(u)\ cos(v)\\
x &= (d (c - a \cos(u)\cos(v)) + b^2 \cos(u))/h\\
y &= (b \sin(u) (a - d \cos(v)))/h\\
z &= b \sin(v) (c \cos(u) - d)/h
\end{align}
\]
size(500,0);
import graph3;
currentprojection=orthographic(2,1,3);

real a=3;
real b=2.9;
real c=0.7;
real d=1.7;
real h(pair z){return a-c*cos(z.x)*cos(z.y);}
real X(pair z){return (d*(c-a*cos(z.x)*cos(z.y))+b^2*cos(z.x))/h(z);}
real Y(pair z){return (b*sin(z.x)*(a-d*cos(z.y)))/h(z);}
real Z(pair z){return b*sin(z.y)*(c*cos(z.x)-d)/h(z);}

triple F(pair z){return (X(z),Y(z),Z(z));}
surface s=surface(F,(0,0),(2pi,2pi),50,50);

draw(s,paleblue,mediumblue,nolight);



定数の値をかなり微調整しないと意図した図になりませんでした。
それにしても上記のサイトの図の配色は綺麗ですね。Asymptoteでは、光の効果を入れると図が黒っぽくなってしまいます。
光の具合を変えることが出来るようなのですが、イマイチ把握できていません。
3DCG作成用のソフトを使ったほうがよいのかも。

この曲面に接平面を引いたりするのは難しそうだなぁ…。