[已解决] 三维曲面投影到二维曲线不对应

[复制链接]
浪荡绅士 发表于 2021-10-13 13:50:24
  1. clear all
  2. N=200;
  3. w0=200e-9;
  4. x=linspace(-1*w0,1*w0,N);
  5. y=linspace(-2*w0,2*w0,N);
  6. X=meshgrid(x,y);
  7. Y=meshgrid(y,x);
  8. %Y=Y';
  9. R=sqrt(X.^2+Y.^2);
  10. I=exp(-2*R.^2./w0.^2);
  11. figure(1)
  12. imagesc(x,y,I);
  13. %axis equal
  14. colormap ;
  15. colorbar;
  16. xlabel('x/m');
  17. ylabel('y/m');
  18. %axis([-3*w0 3*w0-3*w0 3*w0]);
  19. title('光腰处二维光场分布');
  20. hold on;
  21. figure(2)
  22. mesh(x,y,I);
  23. figure(3)
  24. plot(x,I);
复制代码


代码如上,最后figure(3)为什么plot(x,I)和plot(y,I)的结果一样?都是一些列的横线,投影在xoz平面的不应该是一个高斯曲线吗?如下图

xoz面投影二维曲线

xoz面投影二维曲线

运行结果

运行结果

最佳答案


WarnerChang 发表于 2021-10-13 15:20:14
clear all
N=200;
w0=200e-9;
x=linspace(-1*w0,1*w0,N);
y=linspace(-2*w0,2*w0,N);
X=meshgrid(x,y);
Y=meshgrid(y,x);
%Y=Y';
R=sqrt(X.^2+Y.^2);
I=exp(-2*R.^2./w0.^2);
figure(1)
imagesc(x,y,I);
%axis equal
colormap ;
colorbar;
xlabel('x/m');
ylabel('y/m');
%axis([-3*w0 3*w0-3*w0 3*w0]);
title('光腰处二维光场分布');
hold on;
figure(2)
mesh(x,y,I);
figure(3)
plot(x,I(1,:));

注意你的I是200*200的矩阵,而不是向量,而你的x是向量
回复此楼

4 条回复


WarnerChang 发表于 2021-10-13 15:20:14
clear all
N=200;
w0=200e-9;
x=linspace(-1*w0,1*w0,N);
y=linspace(-2*w0,2*w0,N);
X=meshgrid(x,y);
Y=meshgrid(y,x);
%Y=Y';
R=sqrt(X.^2+Y.^2);
I=exp(-2*R.^2./w0.^2);
figure(1)
imagesc(x,y,I);
%axis equal
colormap ;
colorbar;
xlabel('x/m');
ylabel('y/m');
%axis([-3*w0 3*w0-3*w0 3*w0]);
title('光腰处二维光场分布');
hold on;
figure(2)
mesh(x,y,I);
figure(3)
plot(x,I(1,:));

注意你的I是200*200的矩阵,而不是向量,而你的x是向量
回复此楼

浪荡绅士 发表于 2021-10-13 16:39:38
WarnerChang 发表于 2021-10-13 15:20
clear all
N=200;
w0=200e-9;

原来如此,非常感谢解惑。那还想请教下,按照我之前的plot指令,它没有报错,那它是怎么一个运算逻辑,我一直没想明白。现在x和y向量包含的个数一样时,plot(x,I)和plot(y,I)是一样的,都是三维投影到yoz平面上的对应曲线,但当x和y向量包含的个数不一样时,plot(x,I)和plot(y,I)的结果不一样,分别是三维曲面投影到xoz和yoz面上的对应曲线,这是为何?

WarnerChang 发表于 2021-10-13 18:46:17
浪荡绅士 发表于 2021-10-13 16:39
原来如此,非常感谢解惑。那还想请教下,按照我之前的plot指令,它没有报错,那它是怎么一个运算逻辑,我 ...

plot(X,Y) 创建 Y 中数据对 X 中对应值的二维线图。
如果 X 和 Y 都是向量,则它们的长度必须相同。plot 函数绘制 Y 对 X 的图。
如果 X 和 Y 均为矩阵,则它们的大小必须相同。plot 函数绘制 Y 的列对 X 的列的图。
如果 X 或 Y 中的一个是向量而另一个是矩阵,则矩阵的各维中必须有一维与向量的长度相等。如果矩阵的行数等于向量长度,则 plot 函数绘制矩阵中的每一列对向量的图。如果矩阵的列数等于向量长度,则该函数绘制矩阵中的每一行对向量的图。如果矩阵为方阵,则该函数绘制每一列对向量的图。
如果 X 或 Y 之一为标量,而另一个为标量或向量,则 plot 函数会绘制离散点。但是,要查看这些点,您必须指定标记符号,例如 plot(X,Y,'o')。

浪荡绅士 发表于 2021-10-14 09:29:26
WarnerChang 发表于 2021-10-13 18:46
plot(X,Y) 创建 Y 中数据对 X 中对应值的二维线图。
如果 X 和 Y 都是向量,则它们的长度必须相同。plot  ...

谢谢指教!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表