ブロックを積みながら(168) Scilab/Xcos、3次元プロット、ブロック2種

Joseph Halfmoon

「初歩の物理実験」シリーズ、ここまで2次元のグラフでお茶を濁してきましたが、いよいよ3次元空間へ進出すべしという機運が盛り上がってきました(といっているのはお惚け老人だけですが。)そういえば3次元プロット可能なXcosブロック、使ったことがありませぬ。そこで今回は3Dプロットの練習。2種類あるのよブロックが。

※「ブロックを積みながら」投稿順 index はこちら

※動作確認にはWindows 11の パソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。

  Scilab 2024.0.0

3次元表示可能なブロック

調べてみると、Xcosのパレット中に3Dと名のつくブロックが以下の3つあるのです。

    1. CANIMXY3D、animated viewer
    2. CSCOPXY3D、permanent viewer
    3. 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

CSCOPXY3D

CANIMXY3Dは animated viewer というだけあって、一種の簡易アニメーションを描くためのブロックのようです。あるシミュレーション時刻に描かれるものは「バッファ」サイズに収まる限りの有限長の時間長さに現れる「スナップショット」的な点です。シミュレーションが進むと以前の点は消えて新たな点が描かれるのでアニメーション風に見えないこともない、というもの。シミュレーション完了時には最後のタイミングで描かれた点群だけが画面に残ります。「バッファ」を長くすれば一度に描かれる点の数は多くできます。ただし、シミュレーション時刻の進行速度を手加減する方法があるのかないのかお惚け老人は知らず。手元の環境で以下の実施例程度のフローを走らせるとあっという間にシミュレーションは終わるので途中経過はほぼほぼ見えませぬ。

一方、SCOPXY3Dは、permanent viewerということで、シミュレーション期間中の表示点をすべて表示しつづけるようです。「軌跡」を描くのに適するのでないかと。

動作確認用のフロー

上記2つのブロックの動作確認用のフローが以下に。3Dplot_flow

 

CMSCOPEは、各変数X、Y、Zのそれぞれを時間tに対してプロットするためのものです。一方CANIMXY3DとCSCOPXY3Dは、X、Y、Zを時間tとは明示的には関係なくプロットします。

その結果が以下に。まずは各変数それぞれの値。CMSCOPE

上記のような入力に対する CSCOPXY3Dの描く「軌跡」が以下に。

CSCOPXY3Dまた、CANIMXY3Dの「最終時刻」の様子が以下に。

CANIMXY3D結局、CANIMXY3Dに渡すバッファサイズをデカくしていくと、描かれる図形はCSCOPXY3Dに近いものになります。どっちもどっちか?

ブロックを積みながら(167) Scilab/Xcos、電気回路実験、LCR直列回路 へ戻る

ブロックを積みながら(169) Scilab/Xcos、3次元ランダムプロット、酔歩? へ進む