u1=linspace(3,5,101); th=0:0.1*pi/180:2*pi; [U,Th]=meshgrid(u1,th); alpha=10*pi/180; p=0.05; x=-U.*cos(alpha).*sin(Th); y=U.*cos(alpha).*cos(Th); z=-U.*sin(alpha)+p*Th; mesh(x,y,z); 已知空间一个曲面,想画出该曲面在某一点处的切平面 需要分别求出该点的三个偏导数再进行求解 一个问题是偏导数清楚怎么求; 还有一个问题是求出切平面方程F(x,y,z)=0,如何将这个平面在matlab中画出来 希望有老师能给点思路一下 |
最佳答案
曹呆呆槑 发表于 2021-4-8 14:59 你的三维图归根结底是在xyz坐标系中绘制的,所以才说直接用x,y的网格,这有什么"不知道怎么确定"的呢? 你的切点肯定在原曲面上,而且你有切点的参数数值,可以算出来切点的xyz坐标,比如 [ x0, y0, z0 ],法向量的计算去按知乎那里的推导过程计算,假定求出切点的法向量是 [ a, b, c ],切点本身也在切平面上,所以平面方程可以表达为 a * x0 + b * y0 + c * z0 == a * x + b * y + c * z x, y, z就是切平面的坐标应当满足的关系式 这个式子总可以表达为 z = p1 * x + p2 * y + p3 的形式 (特定曲面的某些切面可能由于与坐标轴平行或垂直等特殊关系,x, y, z中有某个或某两个会不存在,即对应的法向量含有两个或一个零,那些特例反更简单,这里不讨论) 它对应着 z = @( x, y ) p1 * x + p2 * y + p3 形式的函数,你自己按照图里面想要绘制切面的 x, y 区域,meshgrid生成网格,代入上述函数里面,这不就三个绘图用的矩阵全都有了么!然后调用surf或者mesh之类绘制切平面 |
5 条回复
知乎上面有推导过程,自己去看
无非就是自己根据那个推导过程计算一下特定切点的法向量的数值,再根据法向量得到切平面的方程并绘图 上图是你的参数曲面的四个随机切点的法向量与切平面,太扁了看着不明显 ![]() 下图是椭球的四个随机切点的法向量与切平面 ![]() |
EngineerLeon 发表于 2021-4-6 10:11 根据您的建议现在确定u=4,Th=90°处切平面方程 切点[x1,y1,z1],法向量[x',y'z'] 切平面方程表示为 x'(x-x1)+y'(y-y1)+z'(x-z1)=0 一个是不知道怎么将这种平面方程转化成参数(u,th)的参数方程,并且绘制出来; |
曹呆呆槑 发表于 2021-4-7 16:46 为什么要舍近求远再转化成参数u, th表达的形式 有了切平面的xyz方程之后,直接用反求一下z = a * x + b * y + c的表达式,然后用x,y的网格绘制啊 |
EngineerLeon 发表于 2021-4-8 07:31 x,y的网格不知道怎么确定 x,y是根据u和th确定的 我自己把u和th作为参数计算出x,y的最值,然后对其进行划分网格,然后画出来的图形是这样的 所以转换成u和th的网格比较清楚 后面参数变化的话也知道应该怎么调整。 |
曹呆呆槑 发表于 2021-4-8 14:59 你的三维图归根结底是在xyz坐标系中绘制的,所以才说直接用x,y的网格,这有什么"不知道怎么确定"的呢? 你的切点肯定在原曲面上,而且你有切点的参数数值,可以算出来切点的xyz坐标,比如 [ x0, y0, z0 ],法向量的计算去按知乎那里的推导过程计算,假定求出切点的法向量是 [ a, b, c ],切点本身也在切平面上,所以平面方程可以表达为 a * x0 + b * y0 + c * z0 == a * x + b * y + c * z x, y, z就是切平面的坐标应当满足的关系式 这个式子总可以表达为 z = p1 * x + p2 * y + p3 的形式 (特定曲面的某些切面可能由于与坐标轴平行或垂直等特殊关系,x, y, z中有某个或某两个会不存在,即对应的法向量含有两个或一个零,那些特例反更简单,这里不讨论) 它对应着 z = @( x, y ) p1 * x + p2 * y + p3 形式的函数,你自己按照图里面想要绘制切面的 x, y 区域,meshgrid生成网格,代入上述函数里面,这不就三个绘图用的矩阵全都有了么!然后调用surf或者mesh之类绘制切平面 |
Powered by Discuz! X3.4
© 2001-2021