2016-08-30 8 views
2

MuPADの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でこれを達成する方法はありますか?

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

関連する問題