Bezier曲線によるレンズ形状近似 - その5 [レンズ形状をBezierで描く]
前回と前々回で、Bezier曲線で近似するための数学の整理は終わった。というわけであとはさくっと実装してZEMAXの出力と比較してみる。直接比較のためにまずZEMAXのファイルを読み込むためのクラスを先に実装する。
データはなんでもいいんだけど、いつもこういうときのデータとしてお世話になっているこちらのサイトにあるTESSARのデータ(美しい、いい設計だ。ビグネットは大きいけど、それも上手く切れている)を拝借してZEMAXに読み込んだ。
デフォルトの設定でPNGファイルを作ると みたいなのができる。出力形式はPNG以外にBMPとJPGができるけどビットマップばっか。従ってディテールは というような感じでみっともない。
出力解像度も調整できるだろうけど、そうするとファイルサイズはでかくなる。ベクタデータをepsやpdfで出力すれば、ファイルのサイズはずっと小さいし美しい。
ZEMAXのマニュアルにフォーマットの説明がない。しかし、zmxファイルはどうやらUTF16のテキストらしいので何が書いてあるかはわかる。ファイルの頭は例えば
おそらくこういうことだろう、と当たりをつけて読み込んでみる。行ごとになっていて行の先頭の単語がキーワードになっているらしい。レンズを描くためのキーワードを探してみると「SURF」というのがみつかる。
例えば球面は
よくわからないのも多いけどレンズの外形を描くための情報はとりあえずわかった。簡単にまとめると
ちなみに、実際に読み込むクラスを書いて初めてわかったんだけど、DIAMというキーワードがあって当然レンズの外直径を表すんだろう、と思っていたら半径だった。決めちゃってから間違ってることがわかって直せなかったのか、メジャーなソフトとしてはかなりカッコ悪い。
3 テスト
ちなみに、ZEMAXは今の会社の資産で、本来はこういうことはしてはいけないんだけど、会社の設備にはすでに部品やソフトウェアのなかにたくさんの僕の私物が含まれてるので、お互いさま(誰のせいかを問うてはいけない)、ということでちょっとだけ使ってみる。どうせこれ(Bezier曲線での近似)も仕事のためにやってるようなもんだし。データはなんでもいいんだけど、いつもこういうときのデータとしてお世話になっているこちらのサイトにあるTESSARのデータ(美しい、いい設計だ。ビグネットは大きいけど、それも上手く切れている)を拝借してZEMAXに読み込んだ。
デフォルトの設定でPNGファイルを作ると みたいなのができる。出力形式はPNG以外にBMPとJPGができるけどビットマップばっか。従ってディテールは というような感じでみっともない。
出力解像度も調整できるだろうけど、そうするとファイルサイズはでかくなる。ベクタデータをepsやpdfで出力すれば、ファイルのサイズはずっと小さいし美しい。
3.1 ZEMAXファイルの読み込み
確認のため、やっつけでZEMAXのzmxファイルを読み込むクラスを書いてみる。ZEMAXのマニュアルにフォーマットの説明がない。しかし、zmxファイルはどうやらUTF16のテキストらしいので何が書いてあるかはわかる。ファイルの頭は例えば
VERS 150205 131 33105 MODE SEQ NAME PFIL 0 0 0 LANG 0 UNIT MM X W X CM MR CPMM ENPD 3.8 .....と、こんな感じである。
おそらくこういうことだろう、と当たりをつけて読み込んでみる。行ごとになっていて行の先頭の単語がキーワードになっているらしい。レンズを描くためのキーワードを探してみると「SURF」というのがみつかる。
SURF 0 TYPE STANDARD FIMP CURV 0.0 0 0 0 0 "" HIDE 0 0 0 0 0 0 0 0 0 0 MIRR 2 0 DISZ INFINITY DIAM 0 0 0 0 1 "" POPS 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0これは物体面である。
例えば球面は
SURF 2 TYPE STANDARD CURV 6.100164704447019700E-002 0 0.000000000000E+000 0.000000000000E+000 0 HIDE 0 0 0 0 0 0 0 0 0 MIRR 2 0.000000000E+000 SLAB 11 DISZ 4.000000000000E+000 GLAS S-BSM15 0 0 1.62298998 58.05972207 -0.00080000 1 1 1 0.00000000 0.00000000 DIAM 9.000000000000E+000 1 0 0 1.000000000000E+000 POPS 0 0 0 0 0 0 0 0 1 1 1.000000000000E+000 1.000000000000E+000 0 0.000000000000E+000 0.000000000000E+000 FLAP 0.000000000000E+000 9.000000000000E+000 0のようになっているので、TYPEというキーワードがZEMAXの面形状のタイプに対応するらしい。ちなみにSTANDARDは回転対称な平面、球面、2次曲面のことである。このなかはひとつインデントされている。その中にのCURVというキーワードがあってあきらかに中心曲率である。DIAMは直径、GLASは硝材、DISZは光軸方向の次の面までの距離であろうということが想像できる。
よくわからないのも多いけどレンズの外形を描くための情報はとりあえずわかった。簡単にまとめると
- NAME
- 付加的な名称
- TYPE
- 面のタイプ
- CURV
- 曲率
- DISZ
- 次の面までの距離
- GLAS
- 硝材
- CONI
- 円錐係数
- PARM
- 非球面のベキ係数など
- DIAM
- 半径(直径ではない)
- STOP
- 絞り位置の指定
ちなみに、実際に読み込むクラスを書いて初めてわかったんだけど、DIAMというキーワードがあって当然レンズの外直径を表すんだろう、と思っていたら半径だった。決めちゃってから間違ってることがわかって直せなかったのか、メジャーなソフトとしてはかなりカッコ悪い。
2015-06-04 21:06
nice!(0)
コメント(0)
トラックバック(0)
コメント 0