照度分布計算その9 - パラメータ設定 [回折による照度分布計算]
回折計算の実装。何度か出てきたパラメータを設定するクラスSParameters。
また、kOutput*は出力を制御するためのパラメータで、NSNumberの0以外が設定されていると、それに対応した複素配列がMathematicaに渡る。
このクラスのインスタンスはアプリケーションにひとつの、いわゆるシングルトン。インターフェイスは
@interface SParameters : NSObject { NSMutableDictionary *parameters; NSDictionary *defaults; } + (id)currentParameters; - (void)setValue:(id)value for:(NSString *)parameter; - (id)querryFor:(NSString *)parameter; - (NSDictionary *)defaultParameters; - (NSDictionary *)currentAllSettings; @end-setValue:for:で値を設定して-querryFor:で読み出す。設定されていない場合はハードコードしたデフォルト値を返す。クラスメソッドcurrentParametersでシングルトンをアクセスする。NSApplicationとかNSUserDefaultsとかといっしょ。あまりまじめに書いてもしょうがないので最低限にする。
static SParameters *parameterHolder = nil; @implementation SParameters - (id)init { if (parameterHolder != nil) return parameterHolder; self = [super init]; parameters = [[NSMutableDictionary alloc] initWithCapacity:30]; [self setDefaults]; return self; } + (id)currentParameters { if (parameterHolder == nil) parameterHolder = [[self alloc] init]; return parameterHolder; }こんなの。外から設定してもらうためのparametersインスタンスを作って自分の-setDefaultsメソッドを呼ぶ。-setDefaultsメソッドはdefaultsインスタンス変数にハードコードしたパラメータ値を設定しておくだけのもの。-retain、-release、-autoreleaseとついでに-retainCountは動かないように上書きしてしておく。-setValue:for:と-querryFor:は
- (void)setValue:(id)value for:(NSString *)parameter { [parameters setObject:value forKey:parameter]; } - (id)querryFor:(NSString *)parameter { id value = [parameters objectForKey:parameter]; if (value == nil) value = [defaults objectForKey:parameter]; return value; }とまあ、せいぜいこんなもん。普通だったらちょっと工夫してNDMutableDictionaryのカテゴリとして実装してしまう程度のもの。
パラメータは全部で
extern NSString *kHelpString; // replay to help from Mathematica // key strings and their units extern NSString *kLambda; // um extern NSString *kFwhmv; // mm extern NSString *kFwhmh; // mm extern NSString *kMagnificationOfRelay; // O / I extern NSString *kRelayShiftv; // mm extern NSString *kRelayShifth; // mm extern NSString *kApertureDiameter; // mm extern NSString *kApertureShiftv; // mm extern NSString *kApertureShifth; // mm extern NSString *kFocalLengthOfConversion; // mm extern NSString *kPinholeDiameter; // um extern NSString *kPinholeShiftv; // um extern NSString *kPinholeShifth; // um extern NSString *kPinholeDefocus; // lambda extern NSString *kDistance; // mm extern NSString *kSubstrateAngle; // degree extern NSString *kSubstrateDiameter; // mm extern NSString *kReflactanceOfLloyd; // reflectance extern NSString *kSubstrateDecenter; // mm extern NSString *kPupilAreaSize; // mm extern NSString *kFftSize; // integer extern NSString *kOutputMeshStep; // mm // output flags 1 or 0 extern NSString *kOutputLaserPlane; extern NSString *kOutputAperturePlane; extern NSString *kOutputPrePinholePlane; extern NSString *kOutputPinholePlane; extern NSString *kOutputPostPinholePlane; extern NSString *kOutputIntensityPlane; extern NSString *kOutputDirectIllumination; extern NSString *kOutputMirroredIllumination;こんだけ。後ろのコメントには決めうちしてる単位を書いてある。
また、kOutput*は出力を制御するためのパラメータで、NSNumberの0以外が設定されていると、それに対応した複素配列がMathematicaに渡る。
2008-06-21 10:56
nice!(0)
コメント(1)
トラックバック(0)
沒有醫生的處方
what is cialis http://cialisyoues.com/ Cialis reviews
by Generic cialis (2018-04-14 17:55)