円錐・円錐台・円柱

円錐・円錐台・円柱を描きます。

円錐は,媒介変数表示で曲面を描きます。

fd=[

"p",

"x=r*cos(t)","y=r*sin(t)","z=2*(2-r)",

"r=[0,2]","t=[0,2*pi]","e"

];

Startsurf();

Sfbdparadata("1",fd);

ExeccmdC("1");

この面に色塗りをしますが,曲面への色塗りは,面をいくつかの領域に分けて色塗りをするという方法をとっています。円錐の場合は,角錐の底面が72角形,96角形と細かくしていけば円に近づいていくので,たとえば,正96角錐として描くと,それらしくなります。角錐は frustum(name,角数,上面半径,底面半径,高さ,option)で描きます。円錐の場合は上面の半径は0です。次の行を追加します。

frustum("1",96,0,2,4,["Color=yellow"]);

Tex に描き出すと,よく見ると筋は見えるものの,それらしくはなります。

円錐台の場合,媒介変数表示で r の範囲を途中からにすれば描けます。また,式の最後の "e" を "ew" に変えます。

fd=[

"p",

"x=r*cos(t)","y=r*sin(t)","z=2*(2-r)",

"r=[1,2]","t=[0,2*pi]","ew"

];

Startsurf();

Sfbdparadata("1",fd);

ExeccmdC("1");

面に色を塗るのは円錐の場合と同様です。

frustum("1",96,1,2,2,["Color=yellow"]);

横向きの円錐を描くときは,次のように手順を変えます。

・媒介変数表示の式を変えて円錐を描く。

・色塗りをするときは,まず rfrustum() で オプション "nodisp" をつけて戻り値の面データを取得する。

・面データの第1要素が頂点のプロットデータなので,これを,transfer3d() で回転する。

・回転した頂点のデータと,もとの面データの第2要素を使って面データを作り,polyhedron()で描く。

fd=[

"p",

"x=r*cos(t)","y=2*(2-r)","z=r*sin(t)",

"r=[0,2]","t=[0,2*pi]","e"

];

Startsurf();

Sfbdparadata("1",fd);

ExeccmdC("1");

fd=frustum("1",96,0,2,4,["nodisp"]);

pd=fd_1;

pd=transfer3d(pd,["Rotate=[[0,0,0],[-pi/2,0,0]]"]);

fd1=[pd,fd_2];

polyhedron("1",fd1,["Color=yellow"]);

円錐の積分図で断面にハッチをかけて表示するには,円錐を描いたら,適当なところで断面の円を circle3d() で描き,その戻り値のプロットデータを利用して hatch3d() でハッチをかけます。次のようにします。

fd=[

"p",

"x=r*cos(t)","y=2*(2-r)","z=r*sin(t)",

"r=[0,2]","t=[0,2*pi]","e"

];

Startsurf();

Sfbdparadata("1",fd);

ExeccmdC("1");

pd=circle3d("1",[0,2,0],[0,1,0],1);

hatch3d("1",pd,[45,0.5]);

次に、円錐に内接する球を描いてみましょう。

事前に計算が必要です。

たとえば、底面の半径を2、高さを4として、球面の半径を計算します。

スクリプトと結果は次のようになります。

fd=[

"p",

"x=r*cos(t)","y=r*sin(t)","z=2*(2-r)",

"r=[0,2]","t=[0,2*pi]","e"

];

Startsurf();

Sfbdparadata("1",fd);

ExeccmdC("1");

r=sqrt(5)-1;

drawsphere("1",[0,0,r],r,["Color=cyan"]);

円柱

円錐の式を変えれば円柱が描けます。あとは円錐の場合と同様です。

fd=[

"p",

"x=cos(t)","y=sin(t)","z=2-r",

"r=[0,2]","t=[0,2*pi]","ew"

];

Startsurf();

Sfbdparadata("1",fd);

ExeccmdC("1");

frustum("1",96,1,1,2,["Color=yellow"]);

circle3d("1",[0,0,2],[0,0,2],1);

rfrustum() で色塗りをするかわりに球面を描けば次のようになります。

drawsphere("1",[0,0,1],1,["Color=cyan"]);

< 戻る >