2012年4月20日金曜日

Asymptote シルクハット型$C^\infty$級関数

前回$t\leq 0$で$g(t)=0$, $0\leq t\leq 1$で$0\leq g(t)\leq 1$, $t\geq 1$で$g(t)=1$を満たす
$C^\infty$級関数を使いました。今回はこの関数を使って半径$1$の閉円板上で$\varphi(x, y)=1$, 半径2の開円板の外部で$\varphi(x, y)=0$となる関数$\varphi : \mathbb{R}^2 \to \mathbb{R}$の図を書いてみました。
初めて挑戦したことと言えば、関数を条件分岐で定義したくらいです。


シルクハット型というほど立ち上がっていません。次は真横から見た状態です。
かなり綺麗な曲線になっています。$e^{-1/t}$という関数の$t=0$付近での挙動はあまり問題にならないのでしょうか。


size(500,0);

import graph3;
currentprojection=orthographic(2,-1,0.5);

real f(real t){
  if(t>0)
    {return exp(-1/t);}
  else {return 0;}
};
real g(real t){return f(t)/(f(t)+f(1-t));}
real h(real t){return g(t+2)*g(2-t);}

triple F(pair z){return (z.x,z.y,h(abs(z)));};
surface s=surface(F,(-2.5,-2.5),(2.5,2.5),50,50,Spline);
draw(s,lightgray,meshpen=0.01+gray,nolight);
$\sqrt{z}$や$\log z$のRiemann面についての例がこちらで見つけられます。 バネの作図例もあるようでした。さすがにどれも手馴れている感じだなあ。