MATLAB交叉2个表面

时间:2010-04-23 23:10:17

标签: matlab

我认为自己是MATLAB的初学者,所以如果我的问题的答案很明显,请耐心等待。

Phi=0:pi/100:2*pi;
Theta=0:pi/100:2*pi;
[PHI,THETA]=meshgrid(Phi,Theta);

R=(1 + cos(PHI).*cos(PHI)).*(1 + cos(THETA).*cos(THETA));
[X,Y,Z]=sph2cart(THETA,PHI,R);
surf(X,Y,Z); %display

hold on;

x1=-4:.1:4;
[X1,Y1] = meshgrid(x1);
a=1.8; b=0; c=3; d=0;
Z1=(d- a * X1 - b * Y1)/c;
shading flat;
surf(X1,Y1,Z1);

我编写了这段代码,该代码绘制了一个平面与花生形物体相交的三维笛卡尔图。

我需要在2D上获得这些的交集(将成为花生的轮廓,但由于交叉点以某个角度发生,但有点倾斜),但不知道如何。

由于

1 个答案:

答案 0 :(得分:3)

如果您只想获得交叉曲线,可以将曲面坐标插入平面方程,找到几乎位于平面内的点。

%# find the distance of `X,Y,Z` to the plane
dist2plane = a*X(:)+b*Y(:)+c*Z(:)-d;

%# find index of the small distances
lowDistIdx = abs(dist2plane)<0.05; %# or some other distance threshold

%# plot the result - note that it's not quite a peanut
figure,plot3(X(lowDistIdx),Y(lowDistIdx),Z(lowDistIdx),'.')

如果您想在2D中使用这些坐标,则需要进行坐标转换。