[ 前へ | 目次 | 次へ ]
Now Loading...
ダウンロード
PC (※スマートフォンでは動きません) でダウンロードし、ZIPファイルを右クリックメニューから展開して、できたフォルダ内の「 VCSSL.bat(バッチファイル) 」をダブルクリックすると起動します。 Linux等では「 VCSSL.jar 」をコマンド実行してください。
» 詳しい使用方法や、エラーで展開できない際の対応方法などはこちら

円形波のアニメーション表示

振幅・波長・周期などのパラメータに基づいて、円形波をアニメーションで描画するVCSSLプログラムです。

前回前々回 は、線の上、つまり1次元的な媒質上を伝わる 正弦波 のアニメーションを扱いました。 今回はその延長で、面の上、つまり2次元的な媒質上を伝わる波を扱ってみましょう。 具体的には、波源から同心円状に広がる円形波をアニメーションで表示してみます。

[ 関連記事 ]

使用方法

ダウンロードと展開(解凍)

まず、PC(スマホは未対応)で上の画面の「 ダウンロード 」ボタンを押してください。 するとZIP形式で圧縮されたファイルがダウンロードされるので、そのZIPファイルを右クリックして「すべて展開」や「ここに展開」などで展開(解凍)してください。 展開が成功すると、ZIPファイルと同じ名前のフォルダができ、その中にZIPファイルの中身が入っています。

» 展開がエラーで止まってしまう場合は…

なお、Linux® 等をご使用で、右クリックメニューから展開するとファイル名が文字化けしてしまう場合は、 コマンドライン端末でZIPファイルのある場所まで cd した上で「 unzip -O cp932 ZIPファイル名 」で展開してみてください。

プログラムの起動

Microsoft® Windows® をご使用の場合

上記の通りにZIPファイルを展開したフォルダ内にある、 「 VCSSL.bat(種類はバッチファイル) 」をダブルクリック実行してください。 もしプログラムの内容を書き変えながら使いたい場合は、代わりに「 VCSSL_Editor.bat 」を実行してください。

実行すると、最初にメモリー使用量や、(必要な場合のみ)Java®実行環境を自動で入手するか 等を尋ねられるので、適時答えると、プログラムが起動します。2回目以降はすぐに起動します。

※ ここで入手したJava®実行環境は、ZIPファイルを展開した中の「 jre 」フォルダ内にダウンロードされ、このプログラムの実行のみに使用されます。PC全体に影響する形でインストールされる事はありません。

Linux® 等やその他のOSをご使用の場合

ZIPファイルを展開したフォルダ内へコマンドライン端末で cd して、以下の通り入力して実行してください:

java -jar VCSSL.jar
(プログラムの内容を書き変えながら使いたい場合は、代わりに VCSSL_Editor.jar を実行)

» javaコマンドが使用できない等のエラーが表示される場合は…

起動後の画面

起動すると、まず波のパラメータを数値入力するか尋ねられます。 特に「ぴったりこの値の波長にしたい」などの必要が無ければ、「いいえ」でスキップして構いません。

その後、グラフ画面とパラメータ設定画面が立ち上がります。

起動後の画面

グラフ画面では、円形波がアニメーション表示されます。 パラメータ設定画面では、波の波長や振幅、周期などの値をスライダーで操作できます。

ウィンドウを閉じると、プログラムの実行が終了します。

題材解説

円形波は、波源と呼ばれる振動源の動きが、周囲の媒質へ同心円状に伝わっていく事で起こります。

お風呂などで、水面をそっと指で触れると、実際にそこから円形に波が広がっていくのが見られるかと思います。 さらに、指を水面に対して垂直に振動させると、同心円状の波が連続的に広がっていきます(この場合は指が波源です)。

ここでは単純のため、波の各点は、(振幅を含めて)波源と全く同じ動きを、波源からの距離に応じて少し遅れながら行っていると仮定しましょう。 そして、波源は単振動(調和振動)をしているものとします。 そのように仮定すると、波を波源を面で切った断面は、 前々回に扱った正弦波となります。

より具体的には、面上のある点 \( (x,y) \) における波源からの距離を \( r \) として :

\[ r = \sqrt{x^2 + y^2}     (1) \]

その点での波の振動の値を \( z \) とすると、それは

\[ z = A \sin 2 \pi \bigg( \frac{t}{T} - \frac{r}{\lambda} \bigg)     (2) \]

と表す事ができます。 これは 前々回 見た正弦波の式の \( x \) が \( r \) に置き換わっただけですね。 ただし、波源の位置 \( r = 0\) を挟んだ反対側で、波の進む向きが逆転する(波は波源から離れる向きに進む)事には注意が必要です。 \( A \) は振幅、\( \lambda \) は波長、\( T \) は周期で、これも 前々回 と同じなので、詳しくはそちらの説明をご参照ください。

割り切った仮定をしている事に留意を

ところで、波は広がるのに伴って減衰(振幅が小さくなっていく)したり、壁で波が反射したりと、実際には複雑な現象が色々とあります。 上の (2) 式は、そういうものが一切無視できるという、かなり割り切った仮定をしている事に留意が必要です。

実際に面上の波の動きを、もう少し物理的にシミュレーションしたものは、以下の回で扱っています:

  • 上のシミュレーションは、かなり色々な事を簡略化したシミュレーションモデルを用いていますが、 それでも開始と同時に振幅が急に減少し、さらに反射波が重なり合ってきて、すぐによくわからない動きになってしまっています。

    実際の波についても、反射の影響については工夫でどうにかできるにしても、広い領域に広がっていく波が減衰していく事は、実はエネルギー保存則と表裏一体です。 なので、特に波源近くに注目する場合は、 恐らく(相当変な事をしない限り)現実的に減衰を無視できるような状況を作り出す事は難しいと思います。 つまるところ、普通の媒質の上で広がっていく波について、「減衰は無視できるものとする」という仮定を置く事は、 間接的に「エネルギー保存則は無視できるものとする」という仮定を置いているようなものなわけで、 そういう仮定を置く事自体がどうなのかという話にもなるかもしれません。

    一方で、(2) 式のように、(ある意味で非現実的な)単純に距離に関する正弦波で表される円形波を考える事で、 次回で扱う「円形波の干渉」で、独特のパターンが表れる理由を、かなり単純化して理解しやすくなります。 減衰を入れるとそれが一気に難しくなるため、最初から減衰ありで話を進めると、 「 重ね合わせたら結果的にこうなるからこうなる 」といった曖昧な説明になってしまいます。 物理的には減衰がある方が本質的に正しいとしても、 まずは減衰の無い場合について考えて、それから減衰があるとどうなるかを考える、 という方が、思考の流れ的にはワンクッション置けて、わかりやすいのではないでしょうか。 その点で、(2) 式のように割り切った円形波を扱う事にも、一定の利点があると思います。 もちろん、物理的に結構無理な仮定を置いている事に留意しておく必要はあります。

    コード解説

    このプログラムのコードはVCSSLで記述されています。 ここではそのコード内容について簡単に解説します。 VCSSLはC系の単純な文法の言語なので、C言語などに触れた事のある方なら簡単に読めると思います。

    グラフの範囲などを変えたり、色々と改造したいといった場合などは、 プログラムのコード「 CircularWave.vcssl 」をテキストエディタで開いて改造してください。 スクリプト言語なので、コンパイラなどの別ソフトは不要で、コードを書き換えるだけでOKです。

    コード全体

    まずは、コード全体を見てみましょう。

    以上です。大体250行程度の規模の短いコードですね。 各部で行っている処理はコード内のコメントの通りですが、 以下では先頭から順を追って、もう少し詳しく説明します。

    基本的には、前々回の「 正弦波のアニメーション表示 」のコードと非常によく似ていて、 波のデータの次元が増えたのと、表示する2Dグラフが3Dグラフになっただけです。 なので、コードの基本的な流れについては、まず前回のコードをご参照ください。

    以下では、前々回から変わっている部分を中心に、ピックアップして解説していきます。

    変数の宣言

    先頭から続く変数の宣言部では、基本的には前々回と同じですが、 Z方向の次元が新たに増えたので、それに関連する変数が増えています。

    waveX / waveY / waveZ などは、グラフに波のデータを渡すために、波が起こる面上を細かく刻んだ各点の座標値を格納する配列です。 前々回では、波は線の上(X軸上)で起こっていたので、それを単純に刻んだ1次元配列でした。 今回は、波は面の上(X-Y平面上)で起こるので、それをメッシュ状に刻んだ2次元配列になっています。

    メッシュはX軸方向とY軸方向にそれぞれ N 個の格子点があるように刻み(つまり区間数は N-1 )、その区間幅はそれぞれ DX および DY です。

    main 関数

    続いて main 関数です。

    ここも基本的には前々回と同じで、 while( continuesLoop ) { 〜 のアニメーションループ内で、 時刻を小刻みに進めながら、波の起こる面上を細かく刻んだメッシュの格子点上で、波の値を求めて配列に格納し、 それをグラフに渡して描画してもらっています。

    重要なのが、波の値を求めて配列に格納している部分:

    で、この 72行目と76行目は、このページの冒頭で登場した (1) - (2) 式:

    \[ r = \sqrt{x^2 + y^2}     (1) \] \[ z = A \sin 2 \pi \bigg( \frac{t}{T} - \frac{r}{\lambda} \bigg)     (2) \]

    をそのままプログラムのコードの形にしたものです。 つまり今回の処理は、パラパラ漫画の要領で時刻 t を小刻みに進めながら、(2) 式を3Dグラフに連続で描かせてアニメーションしている内容になっています。

    コード内で本質的に重要なのはここまでで、残りの部分はグラフ周りの設定や、GUI画面の構築などの枝葉の処理です。 グラフ周りでは、VCSSLでは2Dグラフと3Dグラフを同じ感覚で扱えるようになっているため、 呼び出している関数名の「2D」が「3D」になっているくらいで、やっている事や流れは前々回とほとんど変わりません。 GUI構築やイベント処理に関しても、前々回とほぼ同じです。

    コード内容は以上です。

    詳しいVCSSLのプログラミングガイド(無料)はこちらへ!

    上記のコードはプログラミング言語VCSSLで記述されており、VCSSLのプログラミングガイドは下記で無料公開しています。 上記のコードを改造したい方や、新しいコードを書いてみたい方はぜひご活用ください!

    ブラウザで読めるWeb版だけでなく、PDF版も無料で配布しています!

    スタートアップガイド( プログラミングがはじめての方向け )
    プログラミングの入門書に相当する内容です。プログラミングが初めての方はこちらがおすすめです。
    即席ガイド( C系言語ユーザー向け )
    C言語や C++ などのC系の言語を扱われている方が、即席でVCSSLを扱うための簡易ガイドです。
    文法ガイド
    VCSSLの文法や基本的な機能を淡々とまとめた、リファレンスマニュアル的な位置づけのガイドです。
    GUI開発ガイド
    ボタンや入力項目などのGUI部品が並ぶ、画面を備えたVCSSLプログラムを開発するためのガイドです。
    2DCG開発ガイド
    画面上や画像ファイルなどに、2次元的な描画を行うVCSSLプログラムを開発するためのガイドです。
    3DCG開発ガイド
    画面上や画像ファイルなどに、3次元的な描画を行うVCSSLプログラムを開発するためのガイドです。
    標準ライブラリ 仕様書
    コード内で呼び出される関数は、大半が標準ライブラリのものです。その詳細仕様を掲載しています。

    ライセンス

    このVCSSLコード( 拡張子が「.vcssl」のファイル )は実質的な著作権フリー(パブリックドメイン) である CC0 の状態で公開しています。 そのままでのご利用はもちろん、言語の種類を問わず、改造や流用などもご自由に行ってください。

    ※ ただし、このVCSSLコードの配布フォルダ内には、ダウンロード後すぐに実行できるように、 VCSSLの実行環境も同梱されており、そのライセンス文書は「 License 」フォルダ内に同梱されています (要約すると、商用・非商用問わず自由に使用できますが、使用の結果に対して開発元は一切の責任を負いません、といった具合の内容です)。 配布フォルダ内の各構成物の一覧やライセンスについては「 ReadMe_使用方法_必ずお読みください.txt 」をご参照ください。

    この記事中の商標などについて

    • OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
    • Windows は、米国 Microsoft Corporation の米国およびその他の国における登録商標です。この記事は独立著作物であり、Microsoft Corporation と関連のある、もしくはスポンサーを受けるものではありません。
    • Linux は、Linus Torvalds 氏の米国およびその他の国における商標または登録商標です。
    • その他、文中に使用されている商標は、その商標を保持する各社の各国における商標または登録商標です。

    [ 前へ | 目次 | 次へ ]
    波の干渉(面上の円形波)のアニメーション表示

    面上の円形波が干渉する様子を、パラメータを操作しながらアニメーションで見られるプログラムです。
    円形波のアニメーション表示

    振幅・波長・周期をスライダ―で操作しながら、円形波のグラフをアニメーションで見られるプログラムです。
    波の干渉(線上の正弦波)のアニメーション表示

    線上(1次元の)の正弦波が干渉する様子を、パラメータを操作しながらアニメーションで見られるプログラムです。
    正弦波のアニメーション表示

    振幅・波長・周期をスライダ―で操作しながら、正弦波のグラフをアニメーションで見られるプログラムです。
    凹レンズを通過する波のシミュレーション

    凹レンズ形状の高密度媒質を通過する、波のシミュレーションです。
    凸レンズを通過する波のシミュレーション

    凸レンズ形状の高密度媒質を通過する、波のシミュレーションです。
    乱雑な密度分布における波のシミュレーション

    密度分布が乱雑な媒質中における、波の伝播のシミュレーションです。
    ローレンツアトラクタ(ファイル出力版)

    4次精度ルンゲ=クッタ法により、ローレンツアトラクタを求めるプログラムです。
    波の屈折のシミュレーション

    密度の異なる領域を、波が屈折しながら通過するシミュレーションです。
    力学アルゴリズムによる波のシミュレーション(面上の波)

    媒質をバネと格子点で近似し、力学的なアルゴリズムで動かす事による、波のシミュレーションです。
    手動で波を発生させるシミュレーション

    スライダーをマウスで動かす事により、波を発生させるシミュレーションです。
    力学アルゴリズムによる波のシミュレーション(線上の波)

    媒質をバネと格子点で近似し、力学的なアルゴリズムで動かす事による、波のシミュレーションです。
    二重振り子のシミュレーション

    ラグランジュ方程式を用いた、二重振り子のシミュレーションです。
    ローレンツアトラクタ(GUI版)

    4次精度ルンゲ=クッタ法により、ローレンツアトラクタを求めるプログラムです。
    この階層の目次
    [ 前へ | 目次 | 次へ ]
    お知らせ

    リニアングラフ3DのVCSSL用APIにカメラ制御関数を追加、回転アニメーションツールも同梱
    2019年10月09日 - RINEARNでは10月9日にソフトウェアの最新版をリリースしました。VCSSLのAPI関数の追加や、リニアングラフ3Dのアニメーションツールの追加など行っています。その概要をお知らせします。

    小型関数電卓 RINPn(旧称リニアンプロセッサー nano)の公式ページを開設
    2019年10月02日 - 現在オープンソースで開発中の、「シンプル&コンパクト」を目指した小型プログラマブル関数電卓ソフト「 RINPn 」の公式ページが、RINEARNサイト内にオープンしました。その概要をお知らせします。

    Vnanoの公式サイトがオープン、チュートリアルやAPI仕様書等も掲載
    2019年08月07日 - オープンソースのアプリケーション組み込み用スクリプトエンジン「 Vnano 」の公式サイトを開設しました。チュートリアルや、スクリプトエンジンのAPI仕様書などが参照できます。その概要をお知らせします。

    新着
    3Dグラフを回転アニメーションさせるツール

    3Dグラフを、Z軸まわりにゆっくりと回転アニメーションさせるツールです。全角度のグラフを、連番の画像ファイルに保存する事もできます。
    2019年10月09日
    [公式ガイドサンプル] ユーザーのGUI操作に対して処理を行う

    「VCSSL GUI開発ガイド」内のサンプルコードです。ユーザーがGUIを操作した際に行う処理を実装します。
    2019年07月28日
    [公式ガイドサンプル] 各種GUIコンポーネントを画面上に配置する

    「VCSSL GUI開発ガイド」内のサンプルコードです。色々な種類のGUI部品を画面上に配置します。
    2019年07月28日
    連番ファイルから3Dグラフをアニメーション描画するツール

    フォルダ内の連番データファイルを読み込み、3Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。
    2019年06月03日
    連番ファイルから2Dグラフをアニメーション描画するツール

    フォルダ内の連番データファイルを読み込み、2Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。
    2019年05月24日
    開発元Twitterアカウント