很卖肉的动漫:直线、曲线、平面、曲面的相交问题

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 19:59:26
转自《工程计算可视化与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))<=.93;
zz=0;yy=r0.*Y;xx=r0.*X;
plot(xx(r0~=0),yy(r0~=0),'r')

%曲线与曲线相交

x=0:pi/400:2*pi;
x=x';
y1=sin(pi*x);y2=cos(pi*x);plot(x,y1,x,y2);hold on
r0=abs(y2-sin(pi*x))<=0.02;
yy=r0.*y1;xx=r0.*x;plot(xx(r0~=0),yy(r0~=0),'r.')

直线与曲面相交

x=-8:0.3:8;y=x;[X,Y]=meshgrid(x,y);
Z=X.^2+Y.^2;
mesh(X,Y,Z);hold on
x=[-10 10];y=[-10 3];z=[30 35];line(x,y,z);
r0=(abs(Y-y(1)-(y(2)-y(1))/(x(2)-x(1))*(X-x(1)))<=0.45)&...
    (abs(Z-z(1)-(z(2)-z(1))/(x(2)-x(1))*(X-x(1)))<0.45)&...
    (abs(Y-y(1)-(y(2)-y(1))/(z(2)-z(1))*(Z-z(1)))<=0.45);
zz=r0.*Z;yy=r0.*Y;xx=r0.*X;
plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'r*')

平面与曲面相交

x=-8:0.1:8;
y=x;
[X,Y]=meshgrid(x,y);
Z1=2*ones(size(X));
Z2=X.^2-Y.^2;
mesh(X,Y,Z1);
hold on
mesh(X,Y,Z2);
r0=(abs(Z1-Z2)<=.65);
zz=r0.*Z1;yy=r0.*Y;xx=r0.*X;
plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'k*')
clc
disp('观察曲面后,按任意键画交线');
pause
clf
plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'k*');

%曲面与多个截平面相交
y=-10:0.5:10;
z=y;
[Z,Y]=meshgrid(z,y);
X=Z;
X1=0*ones(size(Z));
X2=3*ones(size(Z));
X3=-3*ones(size(Z));
Z4=(X.^2-Y.^2)/10;
mesh(X1,Y,Z);hold on
mesh(X2,Y,Z)
mesh(X3,Y,Z);
mesh(X,Y,Z4);
r1=(abs(X1-X)<0.05);
r2=(abs(X2-X)<0.05);
r3=(abs(X3-X)<0.05);
zz1=r1.*Z4;yy1=r1.*Y;xx1=r1.*X;
zz2=r2.*Z4;yy2=r1.*Y;xx2=r1.*X;
zz3=r3.*Z4;yy3=r1.*Y;xx3=r1.*X;
plot3(xx1(r1~=0),yy1(r1~=0),zz1(r1~=0),'k*');
plot3(xx2(r2~=0),yy2(r2~=0),zz2(r2~=0),'k*');
plot3(xx3(r3~=0),yy3(r3~=0),zz3(r3~=0),'k*');
colormap(hsv)
clc;
disp('观察曲面后,按任意键画交线');
hold off

平面与曲面相交

y=-8:0.4:8;
z=y;
[Z,Y]=meshgrid(z,y);
X=Z;
X1=zeros(size(Z));
Z2=zeros(size(Z));
Z3=(X.^2-Y.^2)/10;
mesh(X1,Y,Z);
hold on
mesh(X,Y,Z2);
mesh(X,Y,Z3);
r1=(abs(X1-X)<0.05);
r2=(abs(Z3-Z2)<0.05);
r3=(abs(X1-X)<0.05)&(abs(Z-Z2)<=0.05);
zz1=r1.*Z3;yy1=r1.*Y;xx1=r1.*X;
zz2=r2.*Z3;yy2=r2.*Y;xx2=r2.*X;
zz3=r3.*Z;yy1=r3.*Y;xx1=r3.*X1;

plot3(xx1(r1~=0),yy1(r1~=0),zz1(r1~=0),'k*');
plot3(xx2(r2~=0),yy2(r2~=0),zz2(r2~=0),'k*');
plot3(xx3(r3~=0),yy3(r3~=0),zz3(r3~=0),'k*');

colormap(hsv); 曲面与曲面求交

[x,y]=meshgrid(-2:.1:2);
z1=x.^2-2*y.^2;
z2=x.^2+y.^2-5;
mesh(x,y,z1);
hold on
mesh(x,y,z2);
r0=(abs(z1-z2)<=.1);
zz=r0.*z1;yy=r0.*y;xx=r0.*x;
plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'k*')
colormap(cool)
hold off

曲面求交有三种基本类型:1)代数/代数曲面求交;2)代数/参数曲面求交;3)参数/参数曲面求交。

对情况1)两张曲面均采用代数方程中的显式方程表达,设曲面方程分别为z=f(x,y)和z=g(x,y),则两曲面的交线可以表示为:f(x,y)=g(x,y) , 或f(x,y)-g(x,y)=0   (1)。

(1)式是一个以x,y为变量的二元方程,若令其中一个变量x在区域范围内以一定步长变化,则对于每一个给定的x,(1)就是另一变量的一元高次方程,可以用任意一种数值方法求解。

该方程解有无解,单解,多解等情况,代表曲面相交情况。

对2),两曲面中一张以代数方程隐式表示,f(x,y,z)=0,另一张以参数方程表示:x=px(u,v), y=py(u,v), z=pz(u,v), 曲面交线可以表示为:f(px(u,v),py(u,v),pz(u,v))=0

该式是一个以u,v为变量的二元方程,也可以用数值方法求解得到交线。
对3),两曲面均为参数方程形式,若参数曲面分别为p(u,v)和q(s,t),则其交线方程可表示为:p(u,v)=q(s,t)。由于p(u,v)和q(s,t)都为三维矢量,上面方程等价于px(u,v)=qx(s,t), py(u,v)=qy(s,t), pz(u,v)=qz(s,t)

该交线方程有四个变量,由三个非线性方程组成,理论上,可令一个变量以定步长变化,求解三元非线性方程得到交点的另外三个参数值,进而得到交点。实际上非常困难,高手试一试啊!
一平面与一曲面相交得到? 直线平行于俩个相交平面,求证这直线平行于平面的交线。 三条直线相交,仅有两个交点时,可以确定平面的个数为______个. 求证:如果一条直线和两个相交平面平行,那么这条直线和它们的交线平行 在同一平面内,两直线不平行就相交。 平面上有2002条直线,它们每两条都不平行,每三条都不相交于一点,它们彼此相交而成的线段有几条? 三角形的曲面与底面相交处算不算棱 紧急!平面内有N条直线任意两条都相交,任意三条都不交于一点,则这N条直线的交点的个数是? 平面向量与直线问题 空间直线与平面的问题,具体请点击. 关于直角坐标平面内的直线旋转问题() N条直线相交的规律 直线与平面的关系 求证,平面上两两相交的7条直线相交所得的角中至少有一个小于26度 平面上有2002条直线,它们每两条都不平行,每三条都不交于一点,它们彼此相交而成的线段有多少条? 同一平面,两条直线,如不相交,一定互相平行,对不对?为什么? 五条直线相交,最多能把一个平面分成几个部分 五条直线相交,最多能把一个平面分成几个部分 经过两条相交直线,有且只有一个平面吗?为什么? 贝塞尔曲线和曲面是什么? 怎样测量平面上曲线的长度 直线属于曲线的一种吗? 两条直线分别为x、y,在同一平面内相交与点O,∠xOy=60度,平面上任一点P关于此坐标系是这样定义的: 设平面图形d由曲线y=x的平方,直线x=1和y=0围成,求d的面积s