matlab 我现在有一个matalb的编程问题,具体问题如下: 想要在一个椭球上选取几个椭圆,并以离散点的方

学习 时间:2026-04-03 14:21:44 阅读:8450
matlab 我现在有一个matalb的编程问题,具体问题如下:想要在一个椭球上选取几个椭圆,并以离散点的方式表示出来,并最好可用某种方式知道某一个选取椭圆上的离散点坐标,最终得到一个三维的有几个椭圆组成的椭球骨架,如下图所示:为侧视图和正视图少画了一条斜线,怕太乱,椭球的大小参数任意,最好是对于三维坐标系正直,无角度./>

最佳回答

细腻的钢笔

时尚的毛衣

2026-04-03 14:21:44

clear;clc;
a=2;b=3;c=4;n=5;%自己改
[x,y,z]=meshgrid(linspace(-a,a),linspace(-b,b),linspace(-c,c));
v=x。^2/a^2+y。^2/b^2+z。^2/c^2-1;
isosurface(x,y,z,v,0);%只要骨架的这句去掉
h=contourslice(x,y,z,v,linspace(-a,a,n),linspace(-b,b,n),linspace(-c,c,n),[0 0]);
grid on;xlabel('x');ylabel('y');zlabel('z');axis equal;view(3);
title(sprintf('$$\\frac{x^2}{%d^2}+\\frac{y^2}{%d^2}+\\frac{z^2}{%d^2}=1$$',a,b,c),'interpreter','latex')

再问: 不是离散点的,可以变成离散的么,您现在出来的是连续的~ 谢谢您
再答: clear;clc;
a=2;b=3;c=4;n=5;%自己改
[x,y,z]=meshgrid(linspace(-a,a),linspace(-b,b),linspace(-c,c));
v=x。^2/a^2+y。^2/b^2+z。^2/c^2-1;
isosurface(x,y,z,v,0);%只要骨架的这句去掉
h=contourslice(x,y,z,v,linspace(-a,a,n),linspace(-b,b,n),linspace(-c,c,n),[0 0]);
grid on;xlabel('x');ylabel('y');zlabel('z');axis equal;view(3);set(h,'linestyle','--','edgecolor','k');alpha 。8
title(sprintf('$$\\frac{x^2}{%d^2}+\\frac{y^2}{%d^2}+\\frac{z^2}{%d^2}=1$$',a,b,c),'interpreter','latex') 
再问: 前辈,我要的是离散的点,不是变为虚线,可能我的表达不太好,不好意思您能再稍微改一下么,因为我要知道每个点的坐标,如果是这样虚线,我后续处理会很麻烦,离散点不用多一圈10-20个就够了,可能需要根据步长取点,具体的我不太会。在这里真心感谢~
再答: clear;clc;
a=2;b=3;c=4;n=5;%自己改
[x,y,z]=meshgrid(linspace(-a,a),linspace(-b,b),linspace(-c,c));
v=x。^2/a^2+y。^2/b^2+z。^2/c^2-1;
isosurface(x,y,z,v,0);%只要骨架的这句去掉
h=contourslice(x,y,z,v,linspace(-a,a,n),linspace(-b,b,n),linspace(-c,c,n),[0 0]);
grid on;xlabel('x');ylabel('y');zlabel('z');axis equal;view(3);set(h,'linestyle',':','edgecolor','k');alpha 。8
title(sprintf('$$\\frac{x^2}{%d^2}+\\frac{y^2}{%d^2}+\\frac{z^2}{%d^2}=1$$',a,b,c),'interpreter','latex')
具体的点都保存在h里(图像窗口先不要关闭)。可以用下面的命令得到xd=get(h(1),'xdata');yd=get(h(1),'ydata');zd=get(h(1),'zdata');这里一共画了9条线,h有9个元素,你可以自己取需要的,上面是取第1条线的坐标的命令。

最新回答共有2条回答

  • 紧张的煎饼
    回复
    2026-04-03 14:21:44

    clear;clc;a=2;b=3;c=4;n=5;%自己改[x,y,z]=meshgrid(linspace(-a,a),linspace(-b,b),linspace(-c,c));v=x。^2/a^2+y。^2/b^2+z。^2/c^2-1;isosurface(x,y,z,v,0);%只要骨架的这句去掉h=contourslice(x,y,z,v,linspace(-a,a,n),linspace(-b,b,n),linspace(-c,c,n),[0 0]);grid on;xlabel('x');ylabel('y');zlabel('z');axis equal;view(3);title(sprintf('$$\\frac{x^2}{%d^2}+\\frac{y^2}{%d^2}+\\frac{z^2}{%d^2}=1$$',a,b,c),'interpreter','latex') 再问: 不是离散点的,可以变成离散的么,您现在出来的是连续的~ 谢谢您 再答: clear;clc;a=2;b=3;c=4;n=5;%自己改[x,y,z]=meshgrid(linspace(-a,a),linspace(-b,b),linspace(-c,c));v=x。^2/a^2+y。^2/b^2+z。^2/c^2-1;isosurface(x,y,z,v,0);%只要骨架的这句去掉h=contourslice(x,y,z,v,linspace(-a,a,n),linspace(-b,b,n),linspace(-c,c,n),[0 0]);grid on;xlabel('x');ylabel('y');zlabel('z');axis equal;view(3);set(h,'linestyle','--','edgecolor','k');alpha 。8title(sprintf('$$\\frac{x^2}{%d^2}+\\frac{y^2}{%d^2}+\\frac{z^2}{%d^2}=1$$',a,b,c),'interpreter','latex') 再问: 前辈,我要的是离散的点,不是变为虚线,可能我的表达不太好,不好意思您能再稍微改一下么,因为我要知道每个点的坐标,如果是这样虚线,我后续处理会很麻烦,离散点不用多一圈10-20个就够了,可能需要根据步长取点,具体的我不太会。在这里真心感谢~ 再答: clear;clc;a=2;b=3;c=4;n=5;%自己改[x,y,z]=meshgrid(linspace(-a,a),linspace(-b,b),linspace(-c,c));v=x。^2/a^2+y。^2/b^2+z。^2/c^2-1;isosurface(x,y,z,v,0);%只要骨架的这句去掉h=contourslice(x,y,z,v,linspace(-a,a,n),linspace(-b,b,n),linspace(-c,c,n),[0 0]);grid on;xlabel('x');ylabel('y');zlabel('z');axis equal;view(3);set(h,'linestyle',':','edgecolor','k');alpha 。8title(sprintf('$$\\frac{x^2}{%d^2}+\\frac{y^2}{%d^2}+\\frac{z^2}{%d^2}=1$$',a,b,c),'interpreter','latex')具体的点都保存在h里(图像窗口先不要关闭)。可以用下面的命令得到xd=get(h(1),'xdata');yd=get(h(1),'ydata');zd=get(h(1),'zdata');这里一共画了9条线,h有9个元素,你可以自己取需要的,上面是取第1条线的坐标的命令。

上一篇 如图,在△ABC中,∠B=∠C,D,E,F分别在AB,AC,BC上,且BD=CE,∠DEF=∠B

下一篇 不想要传统电视墙,什么样的电视背景墙简约又出彩