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

手動で波を発生させるシミュレーション

このプログラムは、マウス操作による手動で波を発生させ、それが伝わっていく様子をリアルタイムでアニメーション表示するVCSSLプログラムです。

このプログラムは、以下のプログラムの応用的な内容になっています。詳細なアルゴリズムなどは以下のプログラムで解説しています。必要に応じて、合わせてご参照下さい。

使用方法

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

まず、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コマンドが使用できない等のエラーが表示される場合は…

プログラムを起動すると、グラフ画面と、その左に縦長のスライダーバーが表示されます。

スライダーバーをマウス操作で上下に移動させると、グラフ上に波が発生し、伝わっていきます。波は終端で固定端反射し、戻ってきます。

なお、減衰力や張力、密度など、波のパラメータを変えたい場合は、プログラム内の先頭領域に定義されている数値を直接書き換えてください。

題材解説

詳細な題材解説は以下のプログラムで

このプログラムの詳細な題材解説については、以下のプログラムをご参照下さい。

手動で波を立てる

上記プログラムは、あらかじめ設定された初期値からスタートし、波の挙動をシミュレーションするものでした。

それに対して今回のプログラムでは、一方の端を手動で操作して、任意の波を発生させるように改修を加えてたものです。

今回のシミュレーションに相当するモデルは、例えば長く引っ張ったコイルバネを振った振動や、理科教材のウェーブマシンなどが挙げられます。

マウス操作次第を上手くこなすと任意の形状の波を発生させられるため、波の重ね合わせなどの模擬実験を行う事もできます。

コード解説

コード全体

このプログラムのコード全体は、以下のようになっています。

このとおり、大部分は「力学アルゴリズムによる波のシミュレーション(線上の波)」のプログラムと同様です。全体に及ぶ詳細な解説はそちらをご参照下さい。

今回は、上記プログラムから改修した点を中心に解説します。

先頭領域

プログラムの先頭領域では、数学関数を扱う標準ライブラリ「 Math 」と、 2次元グラフを扱う拡張ライブラリ「 tool.Graph2D 」を読み込んでいます。

加えて、スライダーバーなどのGUIも必要となるため、それらを扱う標準ライブラリ「 GUI 」も読み込んでいます。

グローバル変数、main関数、mainLoop関数はほぼ同一

それに続くグローバル変数、main関数、mainLoop関数は、「力学アルゴリズムによる波のシミュレーション(線上の波)」のプログラムとほぼ同一なので、詳細は割愛します。

initialize関数

続いて、プログラムの最初に、初期化処理を行うinitialize関数です。

この通り、内容は上述のプログラムとほぼ同一となっています。違うのは最後の一行で、ここで画面の構築を行う createUI 関数をコールしています。

createUI関数

initialize関数からコールされる createUI 関数では、画面構築関連の処理を行っています。

先頭の一行、スライダーの値を左端座標に代入する処理が追加されています。

加えて、このプログラムでは自由端と固定端を実行中に切り替える事ができるため、固定端の場合 ( グローバル変数 freeEnd が false ) に、端の力に加えて速度と位置も 0 にする処理も加えています。 こうしておかないと、端が動いているタイミングで固定端に切り替えられた場合、端が等速直線運動で動いていってしまいます。

イベントハンドラ

最後に、新たにイベントハンドラを実装しています。

イベントハンドラとは、GUI部品がユーザーによって操作された場合などに、プログラムの流れとは独立してコールされる関数です。ここでGUI操作に反応する処理を行います。

onCheckBoxClickイベントハンドラとonWindowCloseは、それぞれ選択ボックスが選択された際と、ウィンドウが閉じられた際にコールされるイベントハンドラです。 今回はここでそれぞれ、自由端/固定端の切り替えと、メインループを脱出してプログラムを終了させる処理を行っています。

続くonSliderMoveイベントハンドラは、スライダーが操作された際にコールされるイベントハンドラです。

今回はここで、スライダーの値をグローバル変数 sliderValue にストックしています。そして update 関数でこの値が参照され、波の端の座標 vertexY[0] に同期されます。

なお、onSliderMove関数の中で直接、波の端の座標 vertexY[0] にスライダー値を代入していないのは、現在のVCSSLエンジンがまだマルチスレッド処理に完全対応していないという技術的な要因によるものです。

イベントハンドラ内の処理は、プログラム本体の処理とは別のスレッドで実行されます。現在のVCSSLエンジンでは、同一の配列変数に対する複数スレッドからの同時アクセスは正式サポートされていません(というより、マルチスレッド処理自体がまだ正式サポートではありません)。

同一の配列変数に複数スレッドから同時アクセスするとプログラムが停止したり、インデックスが不整合を起こす場合があります。なので、このように一旦グローバル変数にストックしておいて、メインスレッドから同期するようにしています。

マルチスレッド処理について詳しくは、スレッドを扱う標準ライブラリ「 Thread 」の詳細仕様をご参照下さい。

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

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

リニアングラフ3D/2Dが連番ファイルのアニメーションに標準で対応
2019年07月17日 - リニアングラフ3D/2Dでは、7月17日公開の最新版より、連番ファイルを連続的に読み込みながらアニメーション描画するプログラムを同梱し、メニューから標準で使用可能になりました。その概要をお知らせします。

Vnanoのスクリプトエンジンアーキテクチャ解説2: コンパイラ
2019年07月03日 - オープンソースで開発中のスクリプトエンジン「 Vnano 」のアーキテクチャを解説する連載の第2回です。今回は、スクリプトを中間コードへと変換する、コンパイラ部分の内部をクローズアップして解説します。

新着
[公式ガイドサンプル] ユーザーのGUI操作に対して処理を行う

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

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

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

フォルダ内の連番データファイルを読み込み、2Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。
2019年05月24日
[公式ガイドサンプル] 立体モデルを生成して3D空間に配置する

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを生成し、3D空間に配置します。
2019年05月21日
開発元Twitterアカウント