对称透镜的横截面2D数据转换为Z矩阵MATLAB-从2D横截面绘制3D图

对称透镜的横截面2D数据转换为Z矩阵MATLAB-从2D横截面绘制3D图,matlab,matrix,3d,plot,2d,Matlab,Matrix,3d,Plot,2d,我有个问题,也许你能帮我。就像在标题中一样,我有一个对称透镜的横截面数据-坐标s=-100:1:100和高度y-我想创建整个透镜x,y,z的3D绘图。是否有任何内置功能可以帮助实现这一点?提前谢谢你的帮助 如果没有更多规格,例如y是2D矩阵或1D数组,则无法给出确切答案。但是,以下是如何在Matlab中绘制曲面: % create a meshgrid used as the independent variables of your surface [sx, sy] = meshgrid(-1

我有个问题,也许你能帮我。就像在标题中一样,我有一个对称透镜的横截面数据-坐标s=-100:1:100和高度y-我想创建整个透镜x,y,z的3D绘图。是否有任何内置功能可以帮助实现这一点?提前谢谢你的帮助

如果没有更多规格,例如y是2D矩阵或1D数组,则无法给出确切答案。但是,以下是如何在Matlab中绘制曲面:

% create a meshgrid used as the independent variables of your surface
[sx, sy] = meshgrid(-100:100); 
% if you have your own 2D matrix, ignore this line. 
% if you have a formula, replace this line with your own formula
y = cos(sqrt(((sx/100).^2+(sy/100).^2)/2)*(pi/2));
% draw the surface
surf(sx, sy, y);
若要使另一侧也处于相反位置,请在同一图形上绘制另一个冲浪:

hold on;
surf(sx, sy, -y);

如果我理解正确的话,你有一个1-D数组,你想有效地围绕一个圆“扫描”以生成一个3-D图。下面是一个如何做到这一点的示例

% Some dummy data
Npts = 100;
z = sin(linspace(0, pi, Npts));

Nreps = 100; % How many times to repeat around circle
% Create polar meshgrid and convert to Cartesian
[r, theta] = meshgrid( ...
    linspace(-length(z)/2, length(z)/2, Npts), ...
    linspace(0, pi, Nreps));
[X, Y] = pol2cart(theta, r);
% Copy data Nreps times
Z = repmat(z, Nreps, 1);

% Plot!
surf(X, Y, Z)

对不起,我不明白。你有两个数据:S和Y。你想如何绘制3D图?如果“Y”是一维数组,我们可以假设你想要对称透镜上半部分的曲面图吗?