5章:3次元光線追跡プログラム
作成2019.09.28
- 3次元光線追跡の基礎
3次元光線追跡の理論は非常にわかりにくいのですが以下を参照願います。
「光の不思議と応用 27章:光線追跡の基礎理論」にいく。
「光の不思議と応用 28章 3次元光線追跡計算式の座標系定義」にいく。
「光の不思議と応用 28章 3次元光線追跡計算式の座標系定義」にいく。
- 計算プログラムの開発環境
元々はMS-DOSパソコンのBASICで各種技術計算を行っていました。 その後MACのThinkCに移行し、さらにWindows98のVisual C++(V6.0)に移行しました。
現在はWindows10のVisual Studio 2015に移行しましたがEXCELはいまだにXPバージョンを使用しています。 EXCELは互換性において若干の問題が発生しています。
- 光の不思議と応用 33章:3次元光線追跡演習プログラム
(1)開発環境はVisual C++(V6.0)を使用しました。
(2) Windows10の環境では、 Visual C++(V6.0)は動作しません。
(3)実行dllファイルの修正には、開発環境の変更が不可欠です。
- VBA実行の仕組み
(1) Declare Sub main5 Lib “C:\Program Files\vba_c_optics\VBA_C光線追跡.dll” (ByVal N As Integer)でサブルーチンmain5の場所を指定します。
(2) Sheets(“IN_FM”)の内容を “C:\Program Files\vba_c_optics\IN_FM.txt”にペーストします。
(3) Sheets(“IN_FM2”)の内容を “C:\Program Files\vba_c_optics\IN_FM.txt2”にペーストします。
(4) main5 (M) でdllファイルのサブルーチンmain5を実行します。
(5) “C:\Program Files\vba_c_optics\OUT_M.xls”の内容をSheets("OUT_M").にペーストします。
*絶対番地“C:\Program Files\vba_c_optics”でf指定しているため、 “C:\Program Files\vba_c_optics”に必要なファイルを保存する必要があります。
* “C:\Program Files\vba_c_optics”内のファイルの書換えが禁止されている場合は、動作できなくなります。
*動作しない時期がありましたが、2019年09月25日時点では動作します。(原因不明です。)
- Visual Studio Express 2012開発環境への変更
開発環境Visual C++(V6.0)は正常動作しないので、 Visual Studio Express 2012 for Windows Desktopに移行しました。
VBA(Visual Basic Application)から呼び出すDLL(ダイナミックリンクライブラリ)」にいく。
(1)絶対アドレスを“C:\VBA_C_APP\光線追跡.dll”変更しました。
(2)動作の仕組みは光の不思議と応用 33章:3次元光線追跡演習プログラムと同じです。
* “C:\VBA_C_APP”内のファイルの書換えが禁止されている場合は、動作できなくなります。
*動作しない時期がありましたが、 2019年09月25日時点では動作します。(原因不明です。)
- VBA(Visual Basic Application)から呼び出すコンソールアプリケーション
Windows10アップグレード後から、VBA(Visual Basic Application)から呼び出すDLL(ダイナミックリンクライブラリ) が動作しなくなりました。
対応策として、 DLL(ダイナミックリンクライブラリ)をコンソールアプリケーションに変更しました。
「 VBA(Visual Basic Application)から呼び出すコンソールアプリケーション」にいく。
(1)光線追跡.dllではなくて、光線追跡.exeとなります。
(2)VBA側から光線追跡.exeを起動できません。あらかじめ光線追跡.exeを起動する必要があります。
(3)VBA側からflag.txt:コントロールフラグファイルのフラグを書き換えると、光線追跡.exe側からそれを検知して計算を実行します。
*同じフォルダー内に以下のファイルが必要です。
(1)光線追跡.exe:コンソールアプリ
(2)VBA_C_W10光線追跡.xls:VBAアプリ
(3)flag.txt:コントロールフラグファイル
(4)IN_FM.txt:計算条件ファイル
(4)IN_FM.txt2:計算条件ファイル
*フォルダーの保存場所の制限はありません。
*使い勝手は若干劣ります。
- 今回の改良
(1)以下のコードでサブルーチンmain5を実行できることがわかりました。
Declare Sub main5 Lib "光線追跡.dll" (ByVal N As Integer)
Sub 実行(M)
ChDir ActiveWorkbook.Path
main5 (M) '計算実行
End Sub
(2)変更点:
* Declareで絶対アドレスでなく、ファイル名のみを指定。
* main5 (M) を実行前にChDir ActiveWorkbook.Pathを実行
(3)同じフォルダー内に以下のファイルが必要です。
*光線追跡.dll:ダイナミックリンクライブラリ
*光線追跡.xls:VBAアプリ
*IN_FM.txt:計算条件ファイル
*IN_FM.txt2:計算条件ファイル
(4)フォルダーの保存場所の制限はありません。
(5)計算上の微小誤差による計算エラーの修正
*Hz=(-Z[i+1]+D[i]+1/aR[i+1])*aR[i+1];//Z方向法線ベクトルの値は理論的には1以下ですが、僅かに1を超える場合がある。(開発環境により、誤差は異なるようです。)
*1を超えるとSta0=acos(fabs(Hx*L0x+Hy*L0y+Hz*L0z));//入射角度の計算がエラーとなる。
*対策として、Hzの値を1以下に制限しました。
- 計算プログラムのダウンロード
光線追跡計算プログラムは以下からダウンロードできます。
ダウンロード後は解凍してから使用してください。
光線追跡計算プログラム]をダウンロードする。
解凍すると「光線追跡計算」フォルダーがあります。
「光線追跡計算」フォルダー内に
(1)光線追跡.dll :3次元光線追跡計算サブルーチン本体
(2)光線光線追跡-基本.xls : 3次元光線追跡計算の操作
(3) IN_FM.txt :計算条件表1
(4) IN_FM2.txt :計算条件表2
(5) OUT_M.xls :計算結果
(6)焦点距離計算.xls :焦点距離計算専用VBA
(7)動作条件説明.txt :必要ファイルの説明
(8)光線光線追跡-2色A.xls :光線光線追跡-基本.xlsのコピーでパラメータ変更
(9)光線光線追跡-3色A.xls :光線光線追跡-基本.xlsのコピーでパラメータ変更
があります。
- 3次元光線追跡計算の動作確認
3次元光線追跡計算の使いこなしはかなり難しいのですが、まずは動作確認が必要です。
(1)「光線光線追跡-基本.xls 」をダブルクリックで起動します。
(2)シート「IN_FM」にはあらかじめ、シグマ光機アクロマティックレンズ DLB-20-100PMの計算条件が設定されています。
(3)シート「IN_FM2」は、曲率半径や軸間距離の最適化に必要な条件が設定されています。
(4)シート「操作」の「スポットダイアグラム計算実行」ボタンを押します。
(5)シート「OUT_M」はスポットダイアグラム計算結果の生データです。
(6)シート「変換」をクリックすると以下のグラフが確認できます。
グラフの単位はmmで約7μm程度のスポットになります。これがいいか?悪いか?判断は後回しにします。
(7)シート「光線図」をクリックすると以下のグラフが確認できます。
平行光線が入射され、1点に結像しています。
(8)シート「操作」をクリックし、「波面収差計算実行」ボタンを押します。
(9)シート「OUT_M」は波面収差計算結果のデータです。
波長656nmのX方向収差はU[NUMB-1]が光線角度でABが収差です。
U[0] | X[NUMB-1] | U[NUMB-1] | AB |
0 | -0.003907187 | -0.09053096 | 0.3257599 |
0 | -0.003297747 | -0.0791815 | 0.264536 |
0 | -0.003091139 | -0.06784252 | 0.2097915 |
0 | -0.00296551 | -0.05651457 | 0.1575681 |
0 | -0.002733269 | -0.04519718 | 0.1082482 |
0 | -0.002308079 | -0.03388907 | 0.06453217 |
0 | -0.001678168 | -0.02258838 | 0.02993126 |
0 | -0.0008841578 | -0.01129287 | 0.007679609 |
0 | 0 | 0 | 0 |
0 | 0.0008841578 | 0.01129287 | 0.007679609 |
0 | 0.001678168 | 0.02258838 | 0.02993126 |
0 | 0.002308079 | 0.03388907 | 0.06453217 |
0 | 0.002733269 | 0.04519718 | 0.1082482 |
0 | 0.00296551 | 0.05651457 | 0.1575681 |
0 | 0.003091139 | 0.06784252 | 0.2097915 |
0 | 0.003297747 | 0.0791815 | 0.264536 |
0 | 0.003907187 | 0.09053096 | 0.3257599 |
光線角度0.068rad以上で収差が0.2λ以上になっています。この収差を分析すると
0次 | -0.00004777629 |
1次 | 6.029618E-16 |
2次 | 0.4974408 |
3次 | -2.400063E-15 |
4次 | -0.285107 |
5次 | 1.903655E-15 |
6次 | 0.1134559 |
2次収差は色焦点収差ですが、0.497λと大きいことがわかります。2番目に大きい収差は4次収差の球面収差ですが-0.285λと負に大きいことがわかります。符号が異なると合成の収差は軽減されます。
同様にY方向の収差と波長486nm、波長546nmのXとY方向の波面収差が計算されます。
- 2次元光線追跡計算の動作確認
焦点距離の計算は2次元光線追跡の「焦点距離計算.xls」方が適しています。
(1) 「焦点距離計算.xls」をダブルクリックで起動します。
(2)シート「多面レンズ(緑) (4面)」はアクロマートレンズの計算を面数変更できるように一般化しました。
(3)レンズ面数は「光線光線追跡-基本.xls 」のシートシート「IN_FM」のレンズ面数より1だけ小さい値を設定します。
(4)曲率、位置、屈折率は基本的に同じ設定ですが、D(0)=0、D(NUMB-1)=0を設定します。
(5)「多面レンズ計算実行」ボタンを押すと、焦点距離が計算されます。
(6)一般的には、近軸領域の焦点距離を採用します。
(7)後側焦点距離は実用的な平行光線の半径の値を採用するのが良いと思います。
*基本的な動作確認は以上です。
*次章でアクロマートレンズとアポクロマートレンズの設計方法を説明します。
6章:アクロマートレンズの設計手順に行く。
トップページに戻る。