使用plot::tube函数在MuPAD中,我可以产生管的变化脊柱,但横截面总是一个圆,虽然半径可以变化沿脊柱。例如:
plot::Tube([cos(t), sin(t), 0], 0.4 + 0.3*sin(t)*cos(t),t = -0.5*PI..0.5*PI,Mesh=[60,12]):我想用(非圆形)椭圆截面绘制管子。在MuPAD中有实现这一目标的方法吗?
我可以使用MATLAV生成任意横截面的管道,所以请避免包含使用纯MATLAB命令的答案。
发布于 2016-08-30 23:47:03
至于您的第一个问题,这是否可以用plot::Tube完成:我不这么认为。考虑这一职能的帮助(重点是我):
plot::Tube创建了广义管状图,称为“管状表面”,特殊情况称为“管状表面”、“管状表面”或“管状表面”。 直观地说,渠道表面是具有厚度的空间曲线。更正式地说,渠道表面plot::Tube([x(t), y(t), z(t)], r(t), t = t_min..t_max)是指以中心[x(t), y(t), z(t)]和半径r(t)为中心的球体的包络,即曲线的厚度随曲线参数t的变化而变化。
管被定义为一组球体的包络,这一事实表明它们的横截面本质上是圆形的。
我不熟悉MuPAD,所以我不知道如何优雅地解决您的问题。对于半圆基线的简单示例,我可以使用低级别的plot::Surface,手工构造曲面,将这个简单的解决方案组合在一起:
plot(
plot::Surface(
matrix([cos(t),sin(t),0])
+ numeric::rotationMatrix(t,[0,0,1]) * matrix([(0.2+0.1*sin(2*t))*cos(u),0,(0.2+0.1*cos(2*t))*sin(u)]),
t = -PI/2..PI/2,
u = 0..2*PI,
Mesh = [30,30]),
Scaling=Constrained)

这里t代表沿半圆基线的角参数(圆周方向),u代表沿横截面(极向方向)的角度。t角度的给定截面如下所示:
[(0.2+0.1*sin(2*t))*cos(u), 0, (0.2+0.1*cos(2*t))*sin(u)]也就是说,半长轴沿管的横截面是(0.2+0.1*sin(2*t))和(0.2+0.1*cos(2*t))。
您可以看到,我使用了围绕z轴的旋转矩阵来构造曲面。这充分利用了基线是半圆的事实.但是,在一般情况下,应该可以计算参数化基线的导数(相对于t),并由此计算必要的旋转角度(参数为t)。
https://stackoverflow.com/questions/39236542
复制相似问题