首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MuPad中生成非圆截面管

在MuPad中生成非圆截面管
EN

Stack Overflow用户
提问于 2016-08-30 20:27:41
回答 1查看 158关注 0票数 2

使用plot::tube函数在MuPAD中,我可以产生管的变化脊柱,但横截面总是一个圆,虽然半径可以变化沿脊柱。例如:

代码语言:javascript
复制
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命令的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,手工构造曲面,将这个简单的解决方案组合在一起:

代码语言:javascript
复制
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角度的给定截面如下所示:

代码语言:javascript
复制
[(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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39236542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档