第 3 章 リファレンス 55
3.3 WaveField クラス
3.3.19 基本的な光波・位相・開口を生成するメンバー関数
に設定される.回転変換で用いる補間方法はInterpol列挙型ipで指定する.また,Jacobian = trueの場 合はヤコビアンを用いた厳密計算を行う.
Note
• 回転変換の理論については文献[6,7]を参照.
WaveField& RotateFs(const WaveField& source, RMatrix& crmat, SFrequency* c = NULL, Interpol ip = CUBIC8, bool Jacobian = false)
戻り値 対象オブジェクトへの参照
説 明 sourceオブジェクトをフーリエ空間で回転変換 [6, 7]し,対象オブジェクトに代入する.sourceオブ ジェクトと対象オブジェクトはいずれもフーリエ空間になければならない.RMatrix型のcrmatが回転行列 を与える.回転変換後はキャリア周波数がゼロになるようにスペクトルがシフトしており,このシフト量は SFrequency型のポインタcがNULLでない場合に*cに設定される.回転変換で用いる補間方法はInterpol 列挙型ipで指定する.また,Jacobian = trueの場合はヤコビアンを用いた厳密計算を行う.
Example
R M a t r i x rm = C R M a t r i x Y ( 1 5 * Deg ); //座標をy軸 の 周 り に1 5度 回 転 す る 行 列 W a v e F i e l d a , b ;
a . L o a d W f ( " i n p u t . wf " );
a . Fft ( -1); // aを フ ー リ エ 変 換
b . F a k e F f t (); // bも 形 だ け フ ー リ エ 領 域 に 移 す
b . R o t a t e F s ( a , rm ); // aを 回 転 変 換 し てbに 入 れ る
b . Fft ( 1 ) ; // bを 逆 フ ー リ エ 変 換
b /= b . G e t N ();
b . S a v e A s W f ( " r e s u l t . wf " );
3.3 WaveFieldクラス 107 とry[m]はそれぞれx方向とy方向の1/eビーム半径,nは次数,aは中心部の振幅である.これらの関係は 次式で表される.
f(x, y) =a exp
−
√( x rx
)2
+ (y
ry )2
n
なお,n= 2の場合が通常の基本ガウシアンである.
WaveField& SetSeparableGaussian(double wx, double wy, double nx = 2.0, double ny = 2.0, double a = 1.0)
戻り値 対象オブジェクトへの参照を戻す.
説 明 非円筒対称の変数分離型ガウス関数を生成する関数.wx [m]とwy[m]はそれぞれx方向とy方向の1/e ビーム半径,nxとnyはそれぞれの方向の次数,aは中心部の振幅である.これらの関係は次式で表される.
f(x, y) =a exp [
−(x wx
)nx
−( y wy
)ny ]
なお,n= 2の場合が一般的なガウス関数であり,n>2の場合はスーパーガウス関数と呼ばれる.
WaveField& SetRect(double wx, double wy, double a = 1.0);
戻り値 対象オブジェクトへの参照を戻す.
説 明 矩形開口を生成する関数.開口の中心は物理座標の原点に位置し,x方向の幅がwx[m],y方向の幅がwy [m]ある.開口部の複素振幅の実部はa,虚部は0となる.非開口部は実部虚部とも0となる.
WaveField& AddSphericalWave(Point p, Phase phs, double a, WindowFunc w) WaveField& AddSphericalWave(Point p, Phase phs, double a)
WaveField& AddSphericalWave(Point p)
戻り値 対象オブジェクトへの参照を戻す.
説 明 点光源からの球面波を生成する関数.Point型のローカル座標pに位置する振幅aの点光源からの球面波 を計算し,対象オブジェクトに追加(重畳)する.このとき,球面波の初期位相をPhase型のphsで指定し,ま たエイリアス誤差を防ぐため,WindowFunc列挙型のwで指定する窓関数を使用して描画範囲を制限する.第1 の形式では,これらの全てを明示的に指定する.第2の形式では窓関数は矩形関数となる.第3の形式ではそれ に加え,初期位相が0となる.
WaveField& AddSphericalWaveSqr(const SphericalWaveDescriptor& swd,
double x, double y, double z, double a = 1.0, double InitPhase = 0, WindowFunc w = RECTANGLE)
戻り値 対象オブジェクトへの参照を戻す.
説 明 点光源からの球面波を高速に生成する関数.SphericalWaveDescriptorクラスのディスクリプタswdを 用いて,物理座標(x,y,z)に位置する振幅aで初期位相がInitPhase(= 0∼2π)の点光源からの球面波を計算 し,対象オブジェクトに追加(重畳)する.この関数では三角関数の表参照を用いて,高速計算をおこなう.この とき,エイリアス誤差を防ぐため,WindowFunc列挙型wで指定する窓関数を使用して描画範囲を制限する(現 バージョンでは,RECTANGLE以外の窓関数は不可).
Note
• InitPhaseは0以上2π以下の範囲で与えなければならない.負のInitPhaseに対しては正常に動作しない.
• この関数を呼び出す前に,必ず,SphericalWaveDescriptorクラスのディスクリプタswdを生成しておく必 要がある.
Example
W a v e F i e l d wf (512 , 5 1 2 ) ; //デスククリプタ生成
S p h e r i c a l W a v e D e s c r i p t o r sfd ( wf . G e t W a v e l e n g t h () , wf . G e t P x () , wf . G e t P y ();
wf . C e l a r ();
wf . A d d S p h e r i c a l W a v e R F ( sfd , 0.1 e -3 , -0.1 e -3 , -1 e - 3 ) ; // 球 面 波 を 追 加 wf . A d d S p h e r i c a l W a v e R F ( sfd , -0.1 e -3 , 0.1 e -3 , -1 e - 3 ) ; // 球 面 波 を 追 加
WaveField& SetRandomPhase(int m = 1)
戻り値 対象オブジェクトへの参照
説 明 乱数位相の光波を設定する.振幅は1になる.m = 1のとき,メルセンヌ・ツイスタ(Mersenne twister) アルゴリズムを用いて乱数を発生する.それ以外の場合は,Cランタイムのrand()関数を用いる.
Note
• 乱数ジェネレータのシードを設定するためには,wfl::SetRandomSeed()関数を用いる.
WaveField& ModRandomPhase(int m = 1)
戻り値 対象オブジェクトへの参照
説 明 オブジェクトの位相を乱数化する.この関数ではSetRandamPhase()メンバー関数と異なり,振幅は影響 を受けず,関数適用前の振幅が残されている.スペクトル形式に適用した場合エラーとなる.m = 1のとき,メ ルセンヌ・ツイスタ(Mersenne twister)アルゴリズムを用いて乱数を発生する.それ以外の場合は,Cランタ イムのrand()関数を用いる.
Note
• 乱数ジェネレータのシードを設定するためには,wfl::SetRandomSeed()関数を用いる.
3.3 WaveFieldクラス 109
WaveField& SetQuadraticPhase(double f)
戻り値 対象オブジェクトへの参照
説 明 焦点距離fのレンズとして機能する2次の位相分布を設定する.振幅分布は変化しない.
WaveField& MultiplyQuadraticPhase(double f)
戻り値 対象オブジェクトへの参照
説 明 焦点距離fのレンズとして機能する2次の位相分布を乗算する.振幅分布は変化しない.
WaveField& MultiplyPlaneWave(double CosA, double CosB, Phase phs = 0.0) WaveField& MultiplyPlaneWave(Vector dir, Phase phs = 0.0)
WaveField& MultiplyPlaneWave(SFrequency f, Phase phs = 0.0)
戻り値 対象オブジェクトへの参照
説 明 第1の形式では,方向余弦がx軸に対してCosAでy軸に対してCosB,初期位相がphsの平面波が乗算 される.第2の形式では,方向ベクトルがdirで初期位相がphsの平面波が乗算される.第3の形式では,
SFrequency型の空間周波数がfで初期位相がphsの平面波が乗算される.
Note
• 第2の形式における方向ベクトルdirは,その方向のみが計算に用いられ,長さは無視される.
• 本関数の平面波はグローバル原点での初期位相がphsでグローバル空間中に「固定された」平面波であり,対象 オブジェクトがグローバル原点以外の位置に移動している場合も位相関係が狂うことなく計算される.しかし,
対象オブジェクトが傾いている場合は正しい計算結果が得られない.
WaveField& SetPlaneWave(double CosA, double CosB, Phase phs = 0.0) WaveField& SetPlaneWave(Vector dir, Phase phs = 0.0)
WaveField& SetPlaneWave(SFrequency f, Phase phs = 0.0)
戻り値 対象オブジェクトへの参照
説 明 第1の形式では,方向余弦がx軸に対してCosAでy 軸に対してCosB,初期位相がphsの平面波を設 定する.第2の形式では,方向ベクトルがdirで初期位相がphsの平面波を設定する.第3の形式では,
SFrequency型の空間周波数がfで初期位相がphsの平面波を設定する.
Note
• この関数を適用する以前の光波は消失し,振幅が1の平面波で置き換わる.
• 第2の形式における方向ベクトルdirは,その方向のみが計算に用いられ,長さは無視される.
• 本関数の平面波はグローバル原点での初期位相がphsでグローバル空間中に「固定された」平面波であり,対象
オブジェクトがグローバル原点以外の位置に移動している場合も位相関係が狂うことなく計算される.しかし,
対象オブジェクトが傾いている場合は正しい計算結果が得られない.