Что касается вашего первого вопроса, можно ли это сделать с помощью 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
).
Это потрясающе! Спасибо. Теперь я могу выработать произвольные сечения. – NKN