在 MuPad 中生成具有非圆形横截面的管

Generate tubes with non-circular cross-sections in MuPad

使用 MuPAD 中的 plot::tube 功能,我可以生成具有不同脊柱的管,但横截面始终是圆形,尽管半径可以沿脊柱变化。例如:

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 中实现这一点?

P.S。我可以使用 MATLAV 生成具有任意横截面的管,因此请避免包含使用纯 MATLAB 命令的答案。

关于你的第一个问题plot::Tube是否可以做到:我不这么认为。考虑这个函数的帮助(强调我的):

plot::Tube creates generalized tubular plots, known as "canal surfaces", with special cases known as "tube surface", "pipe surface" or "tubular surfaces."

Intuitively, canal surfaces are space curves with thickness. More formally, a canal surface plot::Tube([x(t), y(t), z(t)], r(t), t = t_min..t_max) is the envelope of spheres with center [x(t), y(t), z(t)] and radius r(t), i.e., the thickness of the curve can vary with the curve parameter 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代表angular沿半圆基线(环形方向)的参数,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)。