接平面
球面に接する平面を描きます。
まず球面を描きます。次の図では半径2で緑色としました。
drawsphere("1",[0,0,0],2,["Color=limegreen"]);
この球面上の点で接ベクトルと法ベクトルを求めて図示し、接平面を描きます。
球面は媒介変数を使って描いていますので、それをx,y,zごとに関数にしておきます。
f(u,v):=2*cos(u)*cos(v);
g(u,v):=2*sin(u)*cos(v);
h(u,v):=2*sin(v);
それぞれの導関数を求めます。ここでは,KeTCindyの微分ではなく,CindyScriptの微分をする関数d() を用います。
変数 u , v のそれぞれについての偏微分です。
fu(u,v):=d(f(#,v),u);
fv(u,v):=d(f(u,#),v);
gu(u,v):=d(g(#,v),u);
gv(u,v):=d(g(u,#),v);
hu(u,v):=d(h(#,v),u);
hv(u,v):=d(h(u,#),v);
適当に角を定めて球面上の点の座標 pt を求めます。
pt=[f(th1,th2),g(th1,th2),h(th1,th2)];
原点からこの点に向かう単位ベクトルを求めます球面上の点における接平面の法線ベクトルです。
va=pt/|pt|;
ベクトルに垂直な平面上に2つの基本ベクトルを作る関数 perpvec() を用いて接平面上の基本ベクトルを作ります。
vb=perpvec(va)_1;
vc=perpvec(va)_2;
これを用いて平面として点ptを中心とする正方形とそれぞれのベクトルを表示します。
PP=pt+2*(vb+vc);
PQ=pt+2*(-vb+vc);
PR=pt+2*(-vb-vc);
PS=pt+2*(vb-vc);
poly3d("1",[PP,PQ,PR,PS],["Color=blue"]);
arrow3d("1",[pt,pt+va],["Color=red","dr,2"]);
arrow3d("2",[pt,pt+vb],["Color=blue","dr,2"]);
arrow3d("3",[pt,pt+vc],["Color=blue","dr,2"]);
TeXに描き出すと次のような図ができます。
作ったスクリプトをまとめておきましょう。
drawsphere("1",[0,0,0],2,["Color=limegreen"]);
f(u,v):=2*cos(u)*cos(v);
g(u,v):=2*sin(u)*cos(v);
h(u,v):=2*sin(v);
fu(u,v):=d(f(#,v),u);
fv(u,v):=d(f(u,#),v);
gu(u,v):=d(g(#,v),u);
gv(u,v):=d(g(u,#),v);
hu(u,v):=d(h(#,v),u);
hv(u,v):=d(h(u,#),v);
th1=2*pi/3;
th2=pi/4;
pt=[f(th1,th2),g(th1,th2),h(th1,th2)];
va=pt/|pt|;
vb=perpvec(va)_1;
vc=perpvec(va)_2;
PP=pt+2*(vb+vc);
PQ=pt+2*(-vb+vc);
PR=pt+2*(-vb-vc);
PS=pt+2*(vb-vc);
poly3d("1",[PP,PQ,PR,PS],["Color=blue"]);
arrow3d("1",[pt,pt+va],["Color=red","dr,2"]);
arrow3d("2",[pt,pt+vb],["Color=blue","dr,2"]);
arrow3d("3",[pt,pt+vc],["Color=blue","dr,2"]);
< 戻る>