前回はもったいなくもMaxima様を電卓代わりに使ってNPNトランジスタの動作点などを計算してしまいました。今回は「いったん」数学的なところに戻って3次元ベクトルを矢印でプロットしてみます。列ベクトルを1次変換して表示っと。目論見的には全然数学じゃなくて、3次元表示のめくるめく?世界に突入したいということなのですが。
※「やっつけな日常」投稿順 Index はこちら
※動作確認は、パソコン上の wxMaxima 22.04.0 および Androidスマホ上の Maxima on Android 3.2.1 で行っています。
3Dベクトルの表示
以下はWindows11機上のMaxima(実際にはGnuplot)で描いた図です。青色の短い矢印がx軸、y軸、z軸方向の i、j、k の単位ベクトルです。黄緑色の長いベクトルが入力ベクトル、赤色のベクトルが黄緑のベクトルをX軸を回転軸に90°左回転させて得たベクトルです。
Windows上で独立した描画ウインドウに3D対象を描いた場合、視点を変えることもできるので、以下のように「見やすい」方向を選ぶことが可能です。
今回使用のMaximaソース
第70回で使用した2次元表示用のソースを持ってきて「チョイ変」したものが以下に。
/* Maxima BATCH FILE 2024/05/23 J.Halfmoon */ /* Display 3D vectors */ algebraic:true$ /*- Utilities -----------------------------------*/ log10(x) := log(x)/log(10)$ roundF(x, p) := float(round(x*10^p)/10^p)$ dB(Vout, Vin) := float(20*log10(Vout/Vin))$ vec3(x, y, z) := matrix([x],[y],[z])$ mat33(a11, a12, a13, a21, a22, a23, a31, a32, a33) := matrix([a11, a12, a13],[a21, a22, a23],[a31, a32, a33])$ vecP3(v3) := vector([0, 0, 0], [v3[1, 1], v3[2, 1], v3[3,1]])$ vecLis3(lis) := if listp(lis) then map(vecP3, lis) else [vecP3(lis)] $ /*- plotvec ------------------------------------*/ plotVec3(vP, xR, yR, zR) := draw3d( xrange=xR, yrange=yR, zrange=zR, proportional_axes=xyz, xaxis=true, yaxis=true, zaxis=true, color = blue, head_length = 0.2, head_angle = 20, vecLis3([vec3(1, 0, 0), vec3(0, 1, 0), vec3(0, 0, 1)]), color = red, vecLis3(vP) )$ plotVec32(vP, vQ, xR, yR, zR) := draw3d( xrange=xR, yrange=yR, zrange=zR, proportional_axes=xyz, grid=true, xaxis=true, yaxis=true, zaxis=true, color = blue, head_length = 0.2, head_angle = 20, vecLis3([vec3(1, 0, 0), vec3(0, 1, 0), vec3(0, 0, 1)]), color = green, vecLis3(vP), color = red, vecLis3(vQ) )$ /*- Example ------------------------------------*/ XR: [-5, 5]$ YR: [-5, 5]$ ZR: [-5, 5]$ vi: vec3(1, 0, 0); vj: vec3(0, 1, 0); vk: vec3(0, 0, 1); v0: vec3(4, 3, 2); I: mat33(1, 0, 0, 0, 1, 0, 0, 0, 1); Rx: mat33(1, 0, 0, 0, 0, -1, 0, 1, 0); vN: Rx . v0; plotVec32(v0, vN, XR, YR, ZR);
MoA(Maxima on Android)上での実行
MoAで実行しても基本的にはWidows版と同じ「図」が得られます。こんな感じ。
ただし、MoAの場合、図の拡張、収縮機能はあるのですが、視点を変更するような機能にはアクセスする手段が見つかりませんでした。ソースコード上で視点変更をすることになるみたいです。
3次元でベクトル表示はできた。さて何を表示する?