#include using namespace wfl; void main() { Start(); WaveField::SetDefault(128, 128, 2e-6); double R = 1e-3; // 瞳の半径 //===== aに物体データ読み込む WaveField a; a.LoadBmp("Shion-128gs.bmp", INTENSITY, 0, 2.2); a.Embed(3); // 8x8倍に拡張 //===== bにレンズの透過関数を設定する WaveField b; b.Embed(3); // aと同じになるように拡張しておく b.SetGaussian(R, 100); // 瞳関数設定.瞳は半径Rの円形瞳 b.SetQuadraticPhase(10e-3); // レンズの位相関数設定.焦点距離は10mm b.SaveAsWf("lens.wf"); // 確認のためwf形式で保存 //===== aをレンズ位置まで伝搬する a.ExactAsmProp(20e-3); // レンズ位置は物体位置から20mm //===== aとbを乗算する b *= a; //===== bをスクリーン位置まで伝搬して縮小する b.ExactAsmProp(20e-3); // スクリーン位置はレンズ位置から20mm b.Extract(3); // 1/(8*8)に縮小 b.Normalize(); b.SaveAsGrayBmp("image.bmp", INTENSITY);// 保存 }