这是我计算菲涅耳衍射的 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 值作为复数。但我找不到合适的解决方案。
如果有人对此提供帮助,我将非常高兴。