关于contourslice函数的不明白之处。

3 views (last 30 days)
pcfftpwx
pcfftpwx on 22 May 2023
Answered: mhwbrx on 22 May 2023
取弧面与圆柱面的交线的坐标数据时,为何用元胞数值存储?代码见下:
R=40;
t=linspace(0,pi/4,25);
p=linspace(0,2*pi,25);
[Fia,Theta]=meshgrid(t,p);
X=R*sin(Fia).*cos(Theta);
Y=R*sin(Fia).*sin(Theta);
Z=R*cos(Fia);
surf(X,Y,Z,'linestyle','none');
alpha(0.5);
hold on;
[x,y,z]=cylinder(8);
x=x+8;y=y+7;z(2,:)=50;
surf(x,y,z);
xlabel('x');ylabel('y');zlabel('z');
axis equal tight;grid on;box on;
view(135,0)
figure
[x,y,z]=meshgrid(linspace(-40,40));
f = (x-8).^2+(y-7).^2-64;
S=contourslice(x,y,z,f,X,Y,Z,[0 0]);%画交线
x_intersect=get(S,'XData');
y_intersect=get(S,'YData');
z_intersect=get(S,'ZData');
xlabel('x');ylabel('y');zlabel('z');
axis equal tight;grid on;box on;
view(135,20);

Accepted Answer

mhwbrx
mhwbrx on 22 May 2023
不用避免,因为这两个patch组成了你的截面:
R=40;
t=linspace(0,pi/4,25);
p=linspace(0,2*pi,25);
[Fia,Theta]=meshgrid(t,p);
X=R*sin(Fia).*cos(Theta);
Y=R*sin(Fia).*sin(Theta);
Z=R*cos(Fia);
surf(X,Y,Z,'linestyle','none');
alpha(0.5);
hold on;
[x,y,z]=cylinder(8);
x=x+8;y=y+7;z(2,:)=50;
surf(x,y,z);
xlabel('x');ylabel('y');zlabel('z');
axis equal tight;grid on;box on;
view(135,0)
figure
[x,y,z]=meshgrid(linspace(-40,40));
f = (x-8).^2+(y-7).^2-64;
S=contourslice(x,y,z,f,X,Y,Z,[0 0]);%画交线
S(1).Vertices
S(2).Vertices
x_intersect=get(S,'XData');
y_intersect=get(S,'YData');
z_intersect=get(S,'ZData');
xlabel('x');ylabel('y');zlabel('z');
axis equal tight;grid on;box on;

More Answers (1)

mhwbrx
mhwbrx on 22 May 2023
不用避免,因为这两个patch组成了你的截面:
R=40;
t=linspace(0,pi/4,25);
p=linspace(0,2*pi,25);
[Fia,Theta]=meshgrid(t,p);
X=R*sin(Fia).*cos(Theta);
Y=R*sin(Fia).*sin(Theta);
Z=R*cos(Fia);
surf(X,Y,Z,'linestyle','none');
alpha(0.5);
hold on;
[x,y,z]=cylinder(8);
x=x+8;y=y+7;z(2,:)=50;
surf(x,y,z);
xlabel('x');ylabel('y');zlabel('z');
axis equal tight;grid on;box on;
view(135,0)
figure
[x,y,z]=meshgrid(linspace(-40,40));
f = (x-8).^2+(y-7).^2-64;
S=contourslice(x,y,z,f,X,Y,Z,[0 0]);%画交线
S(1).Vertices
S(2).Vertices
x_intersect=get(S,'XData');
y_intersect=get(S,'YData');
z_intersect=get(S,'ZData');
xlabel('x');ylabel('y');zlabel('z');
axis equal tight;grid on;box on;

Categories

Find more on 图形对象属性 in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!