空間曲線の描画

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();

[このページのトップへ]