matlab两曲面的交线,MATLAB画曲线交点和曲面交线

%直线与直线相交

function [X,Y]=pll(X1,Y1,X2,Y2)

% 直线相交求交点

A1=Y1(1)-Y1(2);

B1=X1(2)-X1(1);

C1=Y1(2)*X1(1)-Y1(1)*X1(2);

A2=Y2(1)-Y2(2);

B2=X2(2)-X2(1);

C2=Y2(2)*X2(1)-Y2(1)*X2(2);

D=det([A1,B1;A2,B2]);

X=det([-C1 B1;-C2 B2])/D;

Y=det([A1 -C1;A2,-C2])/D;

调用格式:

x1=[1 5];y1=[1 5];x2=[1 5];y2=[5,1];

[x,y]=pll(x1,y1,x2,y2);

plot(x1,y1,'r');

hold on

plot(x2,y2,'b');

plot(x,y,'ko');

直线与多条直线相交

xi=[1 2 3 4 5];yi=[2 6 3 6 1];

plot(xi,yi);hold on

x1=[1 5];y1=[4 5];line(x1,y1);

x=zeros(size(xi));

y=x;

for i=1:5-1

x2=xi([i i+1]);y2=yi([i i+1]);

[x,y]=pll(x1,y1,x2,y2);

plot(x,y,'ro')

end

%直线与曲线相交

x=-8:0.1:8;y=x;[X,Y]=meshgrid(x,y);

R=sqrt(X.^2+Y.^2)+eps;Z=sin(R)./R;

contour(Z,3);hold on

c=contour(Z,3);

x=[0 360];y=[0 400];

y=(y(2)-y(1))/(x(2)-x(1))*(x-x(1))+y(1);z=[0 0];

line(x,y,z);c=c';

X=c(:,1);Y=c(:,2);

r0=abs(Y-(y(2)-y(1))/(x(2)-x(1))*(X-x(1))+y(1))<=0.5; zz=0;yy=r0.*Y;xx=r0.*X;

plot(xx(r0~=0),yy(r0~=0),'ro')

%曲线与曲线相交

x=0:pi/400:2*pi;

你可能感兴趣的:(matlab两曲面的交线)