やっつけな日常(74) Maxima on Android、3次元ベクトルの表示

Joseph Halfmoon

前回はもったいなくも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°左回転させて得たベクトルです。3DvectorWin11

Windows上で独立した描画ウインドウに3D対象を描いた場合、視点を変えることもできるので、以下のように「見やすい」方向を選ぶことが可能です。3DvectorWin11_2

今回使用の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版と同じ「図」が得られます。こんな感じ。3DvectorMoA

ただし、MoAの場合、図の拡張、収縮機能はあるのですが、視点を変更するような機能にはアクセスする手段が見つかりませんでした。ソースコード上で視点変更をすることになるみたいです。

3次元でベクトル表示はできた。さて何を表示する?

やっつけな日常(73) Maxima on Android、エミッタ接地回路、動作点計算 へ戻る

やっつけな日常(75) Maxima on Android、ベクトルの外積、3次元表示 へ進む