空間曲線の描画
Last modified: 2018 年 12 月 30 日 03 時
遠近感を付けるため陰線処理をして空間曲線を描く
主な使用関数: Skeletonpara3data, Spacecurve, Xyzax3data.
空間曲線
ここでは、次の空間曲線 $\displaystyle c(t)=\biggl(\frac{t}{2}\cos t, \frac{t}{2}\sin t, \frac{2t}{3}\biggr)$ を描画します。空間曲線のプロットデータを得るには、Spacecurve関数を使います。また、空間に座標軸を描くには、Xyzax3dataを使い、好きな長さの軸のプロットデータを得ることができます。
Setangle(75,-65);
Setwindow([-12.5,12.5], [-1.5,19.0]);
K=2;
Curv=Spacecurve('[t/K*cos(t), t/K*sin(t), t/3*2]',..
't=[0,8*%pi]', 'N=300');
axis=Xyzax3data('x=[-4,4]', 'y=[-4,4]', 'z=[0,8*%pi]');
//Windisp(Projpara(Curv, axis));
Spacecurve('曲線のパラメータ表示','パラメータtの範囲','N=300')により、空間曲線のプロットデータを得ます。最後のオプション'N=300'は曲線の折れ線近似の点の個数を表し、多ければ多いほどなめらかな描画になります。
このまま曲線を描画すると、曲線の感じがややつかみにくいので、次項で陰線処理をしましょう。
[このページのトップへ]陰線処理
螺旋状の曲線Curvの、自分自身と座標軸に重なる(隠される)部分を陰線処理します。
sCurv=Skeletonpara3data(Curv,list(Curv,axis),4)というふうに、第一引数に陰線処理したい曲線、第二引数にその曲線と重なる曲線のリストを指定して、陰線処理された曲線のプロットデータを得ます。今回の場合は、螺旋状の曲線Curvは座標軸axisと自分自身Curvによっても隠される部分があるため、第二引数にその2つの曲線のリストlist(Curv,axis)を指定します。
sCurv=Skeletonpara3data(Curv, list(Curv, axis), 4); //曲線の陰線処理
saxis=Skeletonpara3data(axis, list(Curv), 4); //座標軸の陰線処理
//Windisp(Projpara(sCurv, saxis));
Openfile('tex/spacecurve_sample.tex');
Beginpicture('0.5cm');
Drwline(Projpara(sCurv), 1.8);
Drwline(Projpara(saxis), 1.0);
Endpicture(0);
Closefile();
sCurv=Skeletonpara3data(Curv,list(Curv,axis),4)の最後の引数"4"は、曲線によって隠された部分を除く大きさを表わし、この引数は省略することも可能です。
[このページのトップへ]ソースコード
ソース(.sce)のダウンロード
Setangle(75,-65);
Setwindow([-12.5,12.5], [-1.5,19.0]);
K=2;
Curv=Spacecurve('[t/K*cos(t), t/K*sin(t), t/3*2]',..
't=[0,8*%pi]', 'N=300');
axis=Xyzax3data('x=[-4,4]', 'y=[-4,4]', 'z=[0,8*%pi]');
//Windisp(Projpara(Curv, axis));
sCurv=Skeletonpara3data(Curv, list(Curv, axis), 4);
saxis=Skeletonpara3data(axis, list(Curv), 4);
//Windisp(Projpara(sCurv, saxis));
Openfile('tex/spacecurve_sample.tex');
Beginpicture('0.5cm');
Drwline(Projpara(sCurv), 1.8);
Drwline(Projpara(saxis), 1.0);
Endpicture(0);
Closefile();
[このページのトップへ]