これがフレネル回折を計算する私の MATLAB コードです。C++ で同じコードを実装したいです。
clc;clear all;close all;
N=512;
M=512;
lambda=632e-9;
X = 12.1e-6;
k=2*pi/lambda;
z0 = (N*X^2)/lambda;
a = (exp(j*k*z0)/(j*lambda))
hX=(exp(j*k*z0)/(j*lambda))*exp(j*pi/(z0*lambda)*X^2*[0:N-1].^2);
hY=(exp(j*k*z0)/(j*lambda))*exp(j*pi/(z0*lambda)*X^2*[0:M-1].^2);
h = hX.'*hY;
figure; imshow(real(h), []);
そして、C ++で同じコードを実装しようとしているときに、これを試しました:
int main (){
std::complex<double> com_two(0,1);
double mycomplex = 1;
double pi = 3.1415926535897;
double N = 512;
double M = 512;
double lambda = 632e-9;
double X = 12.1e-6;
double k = (2*pi)/lambda;
double z0=(N*pow(X,2))/lambda;
//std::complex<double> hx; // Both definitions don't work
//double hy;
/*for (int j=0; j < N; j++){
hy = (exp(mycomplex*k*z0) / (mycomplex*lambda))*exp(mycomplex*pi/(z0*lambda)*pow(X,2)*pow(j,2));
cout << hy <<endl;
}*/
system("pause");
return 0;
}
しかし問題は、計算を実行している間、hx と hy の値が複雑な値を返すことです。
では、MATLAB コードのように i,j のような「mycomplex」をどのように定義すればよいでしょうか。また、次のような割り当てがいくつか見つかりましたstd::complex<double> complex;
しかし、それはうまくいかないと思います.私の意見では、hxとhyの値を複素数として取得する必要があります.しかし、適切な解決策を見つけることができませんでした.
誰かがそれについて助けてくれたらとてもうれしいです。