「はじめての数式処理ソフト―Maximaで楽しむ数式計算と物理グラフィック」のgnuplotのプログラムをつらつら読むと、どうやら正方形をZ軸に沿って積み上げているらしい。
ということはまず、正方形を描けないといけないな。
けれど単純に描くと、discreteを使ってこんな感じになってしまう。
plot2d([discrete,[[-1,-1],[-1,1],[1,1],[1,-1],[-1,-1]]],[x,-2,2],[y,-2,2],same_xy)$
立体にするから三角関数で描く形にした方がよいのだけど
plot2d([discrete,[[cos(0),sin(0)],[cos(0.5*%pi),sin(0.5*%pi)],[cos(%pi),sin(%pi)],[cos(1.5*%pi),sin(1.5*%pi)],[cos(0),sin(0)]]],same_xy)$
これでは、軌跡を描いているわけではないからだめだ。
parametric指定で三角関数で正方形を描くには……うーん、こうか?
plot2d([[parametric,1,sin(t),[t,0,2*%pi]], [parametric,-1,sin(t),[t,0,2*%pi]], [parametric,cos(t),1,[t,0,2*%pi]], [parametric,cos(t),-1,[t,0,2*%pi]]], [x,-2,2],[y,-2,2],same_xy)$
1辺を二回ずつ、描いているところがちょっと嫌だけど、まぁ、いいや。
これを円柱のときのように立体化。
plot3d([[1,sin(t),h],[t,0,2*%pi],[h,-1,1], [-1,sin(t),h],[t,0,2*%pi],[h,-1,1], [cos(t),1,h],[t,0,2*%pi],[h,-1,1], [cos(t),-1,h],[t,0,2*%pi],[h,-1,1]], [x,-2,2],[y,-2,2],[z,-2,2],same_xyz)$
Z軸の位置によってかわる正方形の一辺の長さは三平方の定理からわかるから
半径 = 1 長さ = 2*sqrt(1-z^2)
その分、X,Y座標を調整してやれば、たぶん……。
plot3d([[sqrt(1-h^2),sin(t)*sqrt(1-h^2),h],[t,0,2*%pi],[h,-1,1], [-sqrt(1-h^2),sin(t)*sqrt(1-h^2),h],[t,0,2*%pi],[h,-1,1], [cos(t)*sqrt(1-h^2),sqrt(1-h^2),h],[t,0,2*%pi],[h,-1,1], [cos(t)*sqrt(1-h^2),-sqrt(1-h^2),h],[t,0,2*%pi],[h,-1,1]],same_xyz)$
おっ、できた。
平面図
正面図
右側面図
すばらしい。
そして、45度からの側面
実はこの角度から見たとき、楕円じゃないか、と思ってたしかめたかったのだ。
きっとこれは長軸、正方形の対角線、短軸、正方形の一辺(=円の直径)の楕円だよね。ほー。