2016-08-30 7 views
2

Используя функцию plot::tube в MuPAD, я могу создавать трубки с различным шипом, но поперечное сечение всегда представляет собой круг, хотя радиус может варьироваться вдоль позвоночника. Например:Создайте трубы с некруглыми поперечными сечениями в 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?

P.S. Я могу генерировать трубки с произвольным поперечным сечением с использованием MATLAV, поэтому, пожалуйста, избегайте ответов, в которых используются чистые команды MATLAB.

ответ

1

Что касается вашего первого вопроса, можно ли это сделать с помощью 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) 

output

Здесь 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).

+1

Это потрясающе! Спасибо. Теперь я могу выработать произвольные сечения. – NKN