SSブログ

Bezier曲線によるレンズ形状近似 - その5 [レンズ形状をBezierで描く]

前回前々回で、Bezier曲線で近似するための数学の整理は終わった。というわけであとはさくっと実装してZEMAXの出力と比較してみる。直接比較のためにまずZEMAXのファイルを読み込むためのクラスを先に実装する。

3  テスト

ちなみに、ZEMAXは今の会社の資産で、本来はこういうことはしてはいけないんだけど、会社の設備にはすでに部品やソフトウェアのなかにたくさんの僕の私物が含まれてるので、お互いさま(誰のせいかを問うてはいけない)、ということでちょっとだけ使ってみる。どうせこれ(Bezier曲線での近似)も仕事のためにやってるようなもんだし。

データはなんでもいいんだけど、いつもこういうときのデータとしてお世話になっているこちらのサイトにあるTESSARのデータ(美しい、いい設計だ。ビグネットは大きいけど、それも上手く切れている)を拝借してZEMAXに読み込んだ。

デフォルトの設定でPNGファイルを作ると
0527fig01.png
みたいなのができる。出力形式はPNG以外にBMPとJPGができるけどビットマップばっか。従ってディテールは
0527fig2.png
というような感じでみっともない。

出力解像度も調整できるだろうけど、そうするとファイルサイズはでかくなる。ベクタデータを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
絞り位置の指定
などである。キーワードは4文字らしい。いかにもFORTRAN的な古臭いフォーマットである。

ちなみに、実際に読み込むクラスを書いて初めてわかったんだけど、DIAMというキーワードがあって当然レンズの外直径を表すんだろう、と思っていたら半径だった。決めちゃってから間違ってることがわかって直せなかったのか、メジャーなソフトとしてはかなりカッコ悪い。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。