光学薄膜設計ソフトの設計 その17 - 計算エンジンの実装開始 [考え中 - 光学薄膜設計]
こないだから集中的にやってるBezier曲線のタブレットによる生成はいくつかの数学的な問題を解決しなければ実装に入れない。
Bezier曲線の話では、ずっとちまちました数学ばかりやっててObjective-Cをしばらく書いていない。書かないとすぐ忘れてしまう。ドキュメントスタイルのアプリを書かないとすぐNSDocumentとNSDocumentController、NSWindowControllerなんかとの関係を忘れてしまって書けなくなってしまう。
NSDocumentだけでなく、ちょっと複雑なクラス、例えばNSBundleやNSOutlineViewなんかはさわってないとどうやって使ったらいいのかすぐ忘れてしまう。ダイナミックRAMやな。リフレッシュレート3ヶ月。
ということでちょっとコードを書いておきたい。ずっとUser Interfaceの問題で止まってた光学薄膜設計の実装をひさしぶりにいじってみることにする。
計算エンジンの実装
大まかな構造
User Intefaceを考え出したらまた進まなくなってしまうので、一番簡単な計算エンジンの実装から始めることにする。
もういちど、以前大まかに設計した計算エンジンの構造を思い出すことにする。
図-5.1のようにひとつの層をOTFLayerとして、薄膜全体をOTFLayerCompositionとして保持する。
OTFLayerは自分の属性である媒質の屈折率と、膜厚を保持している。また、OTFLayerCompositionはOTFLayerを要素にするNSArrayを持ち、基板と入射側の媒質の屈折率を保持し、光学パラメータの値が与えられるとその層に対応する特性マトリクスを返す。
OTFLayerCompositionは層それぞれの特性マトリクスの積を作って、薄膜全体のアドミタンスを返す。
OTFOpticalCharacteristicsというオブジェクトが、入射する波長や入射角や偏光方向などの光学パラメータと一緒にOTFLayerCompositionを保持し、アドミタンスが得られたら反射率や透過率等の光学特性を返す、ということにした。
絵にすると図-5.2のような感じ。
また、薄膜の光学特性の計算では波長や入射角が変わると計算し直しだけど、ある層の膜厚が変わるだけだと、それ以外の層の特性マトリクスの変更は必要なく、ただ、その層のマトリクスを計算し直してかけ算すればいい。従って波長や入射角ごとにOTFOpticalCharacteristicsのインスタンスを生成すればあまり面倒な管理をすることなく計算をはしょることができる。
ということで、パラメータが変更されない場合には値をキャッシュして、要求されたときにはそのキャッシュを返すと言うことにした。
この線で実装してみることにする。
まず、単一の層を表すOTFLayerは少なくとも
@interface OTFLayer : NSObject { OTFVariable *thickness; OTFRefractiveIndex *reflIndex; characteristicMatrix cmat; }みたいな感じになる。しかしこのままでは値をキャッシュしたり、パラメータに変更があるかどうかは判断できない。
まずそのあたりの実装を先に考えてみる。
ところで、これ以降書くコードは単なる試行錯誤の途中の列挙であって、デバグされたものではないことをに注意。Objective-C忘れてるな。勘を取り戻す必要がある。ということで続きは明日にしよ。
コメント 0