[ 前へ | 目次 | 次へ ]
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コマンドが使用できない等のエラーが表示される場合は…

起動後の操作方法

起動すると、ウィンドウ上に画面が表示され、波が凹レンズ状の高密度媒質を通過する様子がアニメーションで見られます。

画面

画面ウィンドウ上では、下記のマウス操作を行えます。

  • 左ドラッグ … 視点の回転
  • 右ドラッグ … 視点の平行移動
  • ホイールスクロール … 拡大/縮小

密度分布の変更

密度分布は、画像ファイル「 density.png 」として描いたものを読み込むようになっています。実際にこのシミュレーションで用いているのは以下の画像です:

密度分布画像

この通り、凹レンズ状の形状が描かれています。 この画像ファイルの内容を描きかえる事により、自由な密度分布に設定できます。 画像ファイルのピクセルごとの明るさが、その点の媒質密度に対応します。 具体的には、暗いほど密度が重く、明るいほど軽くなります。

パラメータの変更

波に関する各種パラメータは、プログラムのコードの先頭領域にまとめて記載されています。 それらの値を書き換えると、色々と条件を変えてシミュレーションを楽しめます。

シミュレーションの題材解説

このプログラムでは、凹レンズ形状の媒質を、波が通過する様子をシミュレーションしています。 ここでは、その際に生じる現象について、物理学的な観点から、簡単に考察してみましょう。

凹レンズ形状の密度分布

上でも述べましたが、このシミュレーションで用いた媒質の密度分布は、 以下のPNG形式画像ファイルとして読み込んでいます。

密度分布を設定する画像ファイル。
密度分布を設定するPNG形式画像ファイル
ピクセルごとの明度がその点の密度分布に対応します。暗い部分ほど密度が重く、明るい部分ほど軽くなります。このプログラムでは、上記のように凹レンズ形状の分布となっています。

上記の図の、ピクセルごとの明度情報が、その点の密度分布に対応します。 暗い部分ほど密度が重く、明るい部分ほど軽くなります。

上図の通り、このシミュレーションの媒質は、低密度の媒質中に、 凹レンズ形状の高密度領域が埋め込まれた密度分布となっています。

媒質密度と波の速さ

このシミュレーションにおいて重要なのは、媒質密度と、波の速さとの関係です。

波は、密度の大きい(重い)媒質中では遅く、 逆に密度の小さい(軽い)媒質中では速く伝わるという、非常に重要な性質があります。 実は波の屈折現象は、この性質に起因するものです。逆に言えば、 この性質さえ覚えておけば、レンズにおける屈折現象なども、直感的に理解する事ができます。

このあたりについては、以下のシミュレーションで分かりやすく見る事ができます。ぜひ合わせてご参照下さい。

光でも「密度」を「屈折率」に置き換えて解釈すれば同様

今回のシミュレーションでは、電磁気的な波である「 光 」では無く、 力学的な波(つまりは弾性体の振動)を扱っています。

しかし、光の場合でも、媒質密度を屈折率に置き換えれば、 ほぼ同様の議論を行う事ができます。

光の場合は、屈折率が高いほど、遅く進みます。つまり、よく言われる「光の速さ」は真空中のもので、 ガラスの中などではそれよりも遅く進むのです。 これは、媒質密度が高いほど、力学的な波が遅く進むのと同じ対応関係です。

そのため、光学的なレンズに対しては、今回のシミュレーションにおけるレンズの高密度領域を、 単に高屈折率の領域と見なせば、同様の解釈が可能です。

シミュレーション結果

それではシミュレーションの結果を見てみましょう。

実際に、このシミュレーションを実行した様子が下図です。

シミュレーションの様子。
シミュレーションの様子
波は左から右へ進行しています。

上図において、波は左から右へまっすぐ入射しています。波が進行する向きと速さを、矢印で表したのが下図です。

波の進み方
波の進み方
矢印の太さが波の速さに対応しています。レンズ内は高密度で、 波の速さが遅いため、厚い端部を通る波は、薄い中央部を通る波よりも(位相が)遅れます。 これにより、放射状の「屈折」が生じます。

上図において、矢印の太さが波の速さ、矢印の向きが波の進行方向に対応しています。

レンズ内は密度が高いため、波の進む速さが遅くなります。 そしてレンズ外側の部分は、波の進行方向に対して境界に角度が付いているため、 より早期にレンズに触れる外側では遅れ、その時点でまだレンズに触れていない中心側では先に進み、結果として波の同位相の線(山や谷など)は放射状に屈折します。 この屈折現象については「 波の屈折のシミュレーション 」も併せて見ると、より分かりやすいと思います。

さらに波がレンズを脱出する際にも、薄い中心部の波はいち早く脱出して元のスピードに戻り、 厚い外側の波はもっと後までレンズ内に取り残されます。結果、ここでも波の進行方向が放射状に屈折します。

このようにして、最初はまっすぐに入射してきた波が、レンズを通過する際に屈折し、放射状の方向に進みます。 この放射状の進行方向の線を延長すると、レンズの入射方向側のある一点に収束します。 この収束点は一般に「 焦点 」と呼ばれます。

言い換えると、凹レンズを通過する波や光は、焦点を中心として放射状に伸びる方向へ拡散すると見なす事ができます。

焦点の様子。
焦点の様子
レンズにまっすぐ入射した波は、通過後に「焦点」を中心として放射状の方向へ進みます。

ところで、このように凹レンズを通過した波が、「焦点」という一点から放射状に進む理由は、 別に絶対的な法則などで保証されている訳では無く、 単に凹レンズの形がそのように製造されているからです。

つまり、あてずっぽうな形状で凹レンズを造っても、 焦点は綺麗な一点にならず、波も綺麗な円形に広がりません。 いわゆる精度の悪いレンズというやつです。 このあたりに関しては「 凸レンズを通過する波のシミュレーション 」 もご参照下さい。

凹レンズの主な用途

身の回りのレンズを思い浮かべてみると、凸レンズばかり思い浮かび、一見すると凹レンズは影が薄いように思えます。

凸レンズと凹レンズを組み合わせた図 しかし実は、凸レンズが使われている箇所には、大抵凹レンズも組み合わせて使われています。目的は収差を打ち消したり、焦点距離を調整したりなど、どちらかというと補助的なものが多いですが、あまり目に付かない裏方で物凄く使われています。 一眼レフのレンズの内部構成などを見てみると、数多くの凸レンズと凹レンズが複雑に組み合わさったものが多いです。一見ぱっとしない印象ですが、凹レンズは凸レンズ同様、現実では無くてはならないレンズなのです。

また、よく使われている身近な凹レンズの代表例として、近視用のメガネが挙げられます。 これも上記の例に漏れず、目の中にある「水晶体」という凸レンズの焦点距離が近すぎるため、 目の前に凹レンズつまりメガネを置いて、焦点距離を伸ばして( ぴったりと網膜上に像を結ぶように )補正してやるために使われています。

凹メニスカスレンズの図 メガネのレンズは前方に向かって出っ張っている形をしているため、凸レンズだと思っている方は多いかもしれません。しかし近視用レンズは「 凹メニスカスレンズ 」という種類の、れっきとした凹レンズです。 近視用メガネのレンズを良く見ると、端の部分よりも、中央の部分が薄くなっていて、確かに凹レンズである事を確認できます。

コード解説

このプログラムのコードは、プログラミング言語VCSSLで記述されています。

実は、コード内容は以下のページのプログラムと全く同じで、 密度分布を設定する画像ファイル( density.png )が異なるだけです。 モデルやシミュレーション方法、コードなどについての詳しい解説は、以下のページをご参照下さい。

ここでは、コード全体のみを掲載しておきます。

詳しい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アカウント