我的问题是围绕原点旋转椭圆体模型。我正在使用旋转矩阵,但答案看起来不错。你能告诉我问题出在哪里吗? 以下是我的代码。我首先定义了区域和网格大小。 Alpha,Beta,Gamma是围绕X,Y,Z轴的旋转。我计算新坐标(旋转坐标)中的椭球半径,然后逐点检查它们是否与椭球公式一致,以定义epsilon矩阵,这是我基于点位置的目标。最后,我绘制了XY,XZ,YZ平面的epsilon矩阵。这适用于alpha,beta,theta = 0和90度,但对于其他角度,则没有可重新密封的答案。您认为哪里是错误?
仅供参考:此代码是FDTD方法麦克斯韦方程求解器的一部分。
谢谢,
nx=209; ny=209; nz=209;
x_lower=1 ; y_lower=1 ; z_lower=1 ;
x_upper=nx ; y_upper=ny ; z_upper=nz ;
dz=2.366863905325444E-008 ; dy=2.366863905325444E-008 ; dx=2.366863905325444E-008 ;
k_mid=(nz+1-1)/2+1; j_mid=(ny+1-1)/2+1; i_mid=(nx+1-1)/2+1;
x_cyto=0 ; y_cyto=0 ; z_cyto=0 ;
r_cell=2e-6;
alpha=0;
beta=0;
gamma=0;
temp_1=1.334 ; temp_2=1.35;
a_cyto=1e-6 ; b_cyto=1e-6 ; c_cyto=1e-6 ;
temp_3=1.39;
a_nucl=1e-6 ; b_nucl=1.5e-6 ; c_nucl=1e-6 ;
x_nucl=0 ; y_nucl=0 ; z_nucl=0 ;
a_cyto_prime=(a_cyto*(cosd(beta)*cosd(gamma)))-(b_cyto*(cosd(beta)*sind(gamma)))+(c_cyto*(sind(beta)));
b_cyto_prime=(a_cyto*((sind(alpha)*sind(beta)*cosd(gamma))+(cosd(alpha)*sind(gamma))))+...
(b_cyto*(-(sind(alpha)*sind(beta)*sind(gamma))+(cosd(alpha)*cosd(gamma))))+...
(c_cyto*(-sind(alpha)*cosd(beta)));
c_cyto_prime=(a_cyto*(-(cosd(alpha)*sind(beta)*cosd(gamma))+(sind(alpha)*sind(gamma))))+...
(b_cyto*(+(cosd(alpha)*sind(beta)*sind(gamma))+(sind(alpha)*cosd(gamma))))+...
(c_cyto*(cosd(alpha)*cosd(beta)));
for k=z_lower:z_upper
z=dz*(k-k_mid);
z2=(z-z_cyto)^2;
for j=y_lower:y_upper
y=dy*(j-j_mid);
y2=(y-y_cyto)^2;
for i=x_lower:x_upper
x=dx*(i-i_mid);
x2=(x-x_cyto)^2;
if (x2*b_cyto_prime*b_cyto_prime*c_cyto_prime*c_cyto_prime)+...
(y2*a_cyto_prime*a_cyto_prime*c_cyto_prime*c_cyto_prime)+...
(z2*a_cyto_prime*a_cyto_prime*b_cyto_prime*b_cyto_prime)<=...
(a_cyto_prime*a_cyto_prime*b_cyto_prime*b_cyto_prime*c_cyto_prime*c_cyto_prime)
epsilon(i,j,k)=temp_2;
mu(i,j,k)=1;
% if (sqrt(x2+y2+z2)>=r_cell)
% epsilon(i,j,k)=temp_1;
% mu(i,j,k)=1;
% else
% epsilon(i,j,k)=temp_2;
% mu(i,j,k)=1;
% end
else
epsilon(i,j,k)=temp_1;
mu(i,j,k)=1;
end
end
end
end
eps_2D_YZ(1:x,1:x)=epsilon(round(x/2),:,:);
eps_2D_XZ(1:x,1:x)=epsilon(:,round(x/2),:);
eps_2D_XY(1:x,1:x)=epsilon(:,:,round(x/2));
x=length(eps_2D_XY);
subplot(1,3,1); surf(-round((x-1)/2):round((x-1)/2),-round((x-1)/2):round((x-1)/2),eps_2D_XY); title('XY'); view(2); axis equal tight;
subplot(1,3,2); surf(-round((x-1)/2):round((x-1)/2),-round((x-1)/2):round((x-1)/2),eps_2D_XZ); title('XZ'); view(2); axis equal tight;
subplot(1,3,3); surf(-round((x-1)/2):round((x-1)/2),-round((x-1)/2):round((x-1)/2),eps_2D_YZ); title('YZ'); view(2); axis equal tight;