第 3 章 リファレンス 51
3.2 WaveField クラス
3.2.19 基本的な光波・位相・開口を生成するメンバー関数
100 第3章 リファレンス Note
• この関数ではShiftedFresnelProp()メンバー関数とは異なり,伝搬元のsourceオブジェクト と伝搬先の対象オブジェクトは異なったサンプリング数でもよい.
WaveField& ShiftedFresnelPropAddEx(const WaveField& source) 戻り値 対象オブジェクトへの参照
説 明 sourceオブジェクトをシフテッドフレネル型計算法により伝搬しそ,その結果を対象のオブ
ジェクトに加算する.サンプリング数可変型.
Note
• この関数の第 1 の形式では,ShiftedFresnelPropAdd()メンバー関数とは異なり,伝搬元の
sourceオブジェクトと伝搬先の対象オブジェクトは異なったサンプリング数でもよい.
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 ();
102 第3章 リファレンス
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(void) 戻り値 対象オブジェクトへの参照
説 明 乱数位相の光波を設定する.振幅は1になる.ModRandomPhase()メンバー関数を参照せよ.
WaveField& ModRandomPhase(void) 戻り値 対象オブジェクトへの参照
説 明 オブジェクトの位相を乱数化する.この関数ではSetRandamPhase()メンバー関数と異なり,
振幅は影響を受けず,関数適用前の振幅が残されている.スペクトル形式に適用した場合エラーと となる.
WaveField& SetQuadraticPhase(double f) 戻り値 対象オブジェクトへの参照
説 明 焦点距離fのレンズとして機能する2次の位相分布を設定する.振幅分布は変化しない.
WaveField& MultiplyPlaneWave(double CosA, double CosB, Phase phs = 0.0) WaveField& MultiplyPlaneWave(Vector dir, Phase phs = 0.0)
戻り値 対象オブジェクトへの参照
説 明 第1の形式では,方向余弦がx軸に対してCosA でy 軸に対してCosB,初期位相がphsの 平面波が乗算される.第2の形式では,方向ベクトルがdirで初期位相がphsの平面波が乗算さ れる.
Note
• 第2の形式における方向ベクトルdirは,その方向のみが計算に用いられ,長さは無視される.
• 本関数の平面波はグローバル原点での初期位相がphsでグローバル空間中に「固定された」平面波 であり,対象オブジェクトがグローバル原点以外の位置に移動している場合も位相関係が狂うこと なく計算される.しかし,対象オブジェクトが傾いている場合は正しい計算結果が得られない.
WaveField& SetPlaneWave(double CosA, double CosB, Phase phs = 0.0) WaveField& SetPlaneWave(Vector dir, Phase phs = 0.0)
戻り値 対象オブジェクトへの参照
説 明 第1の形式では,方向余弦がx軸に対してCosAでy軸に対してCosB,初期位相がphsの平
面波を設定する.第2の形式では,方向ベクトルがdirで初期位相がphsの平面波を設定する.
Note
• この関数を適用する以前の光波は消失し,振幅が1の平面波で置き換わる.
• 第2の形式における方向ベクトルdirは,その方向のみが計算に用いられ,長さは無視される.
• 本関数の平面波はグローバル原点での初期位相がphsでグローバル空間中に「固定された」平面波 であり,対象オブジェクトがグローバル原点以外の位置に移動している場合も位相関係が狂うこと なく計算される.しかし,対象オブジェクトが傾いている場合は正しい計算結果が得られない.