「初歩の物理実験」シリーズ、ここまで2次元のグラフでお茶を濁してきましたが、いよいよ3次元空間へ進出すべしという機運が盛り上がってきました(といっているのはお惚け老人だけですが。)そういえば3次元プロット可能なXcosブロック、使ったことがありませぬ。そこで今回は3Dプロットの練習。2種類あるのよブロックが。
※「ブロックを積みながら」投稿順 index はこちら
※動作確認にはWindows 11の パソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。
Scilab 2024.0.0
3次元表示可能なブロック
調べてみると、Xcosのパレット中に3Dと名のつくブロックが以下の3つあるのです。
-
- CANIMXY3D、animated viewer
- CSCOPXY3D、permanent viewer
- CMAT3D、Matrix z values 3D viewer
最初の2つと3番目は表示対象とするデータが異なります。最初の2つは、z=f(x, y) で表せるような (x, y, z)の点を、入力、x, y, zに対して描き出すものです。一方3番目のCMAT3Dは2次元のx, y でアクセスできる配列の中にz値が格納されているようなときに、その配列を3次元空間内の「面」として描く関数です。
今回は3次元空間内の点や軌跡を描きたいので、最初の2つを練習してみます。
なお、該当ブロックのScilabのHelpページは以下です。
CANIMXY3Dは animated viewer というだけあって、一種の簡易アニメーションを描くためのブロックのようです。あるシミュレーション時刻に描かれるものは「バッファ」サイズに収まる限りの有限長の時間長さに現れる「スナップショット」的な点です。シミュレーションが進むと以前の点は消えて新たな点が描かれるのでアニメーション風に見えないこともない、というもの。シミュレーション完了時には最後のタイミングで描かれた点群だけが画面に残ります。「バッファ」を長くすれば一度に描かれる点の数は多くできます。ただし、シミュレーション時刻の進行速度を手加減する方法があるのかないのかお惚け老人は知らず。手元の環境で以下の実施例程度のフローを走らせるとあっという間にシミュレーションは終わるので途中経過はほぼほぼ見えませぬ。
一方、SCOPXY3Dは、permanent viewerということで、シミュレーション期間中の表示点をすべて表示しつづけるようです。「軌跡」を描くのに適するのでないかと。
動作確認用のフロー
CMSCOPEは、各変数X、Y、Zのそれぞれを時間tに対してプロットするためのものです。一方CANIMXY3DとCSCOPXY3Dは、X、Y、Zを時間tとは明示的には関係なくプロットします。
上記のような入力に対する CSCOPXY3Dの描く「軌跡」が以下に。
結局、CANIMXY3Dに渡すバッファサイズをデカくしていくと、描かれる図形はCSCOPXY3Dに近いものになります。どっちもどっちか?