• 締切済み

立体の重なった部分の可視化

こんにちは。maximaやmathematicaなどで立体を表示する方法は調べてわかったのですが、2つ以上の立体の重なった部分のみを表示、或いは強調表示したりする方法が分からず困っています。例えば、x^2+y^2+z^2<=4とx^2+(y-1)^2+z^2<=1の表す立体の共通部分を表示するにはどうしたら良いでしょうか? maxima、mathematicaどちらでも構わないのでご存知の人いらっしゃいましたらよろしくお願いします。

みんなの回答

  • sanze_hui
  • ベストアンサー率100% (6/6)
回答No.2

Mathematicaの場合について回答します。 x^2+y^2+z^2<=4とx^2+(y-1)^2+z^2<=1の共通部分ですので、論理積を取ればよいのです。 RegionPlot3D[x^2 + y^2 + z^2 <= 4 && x^2 + (y - 1)^2 + z^2 <= 1, {x, -2, 2}, {y, -2, 2}, {z, -2, 2}] この場合はx^2+(y-1)^2+z^2<=1だけの場合と変わりませんので、片方の中心位置や半径を変えた場合のほうがわかりやすいでしょう。 強調表示をしたい場合は、PlotStyleで元の2つの立体を半透明にしてShowで組み合わせるなどをすればよいでしょう。 Show[ RegionPlot3D[x^2 + y^2 + z^2 <= 4, {x, -2, 2}, {y, -2, 2}, {z, -2, 2}, PlotStyle -> Opacity[0.3]], RegionPlot3D[x^2 + (y - 1)^2 + z^2 <= 1, {x, -2, 2}, {y, -2, 2}, {z, -2, 2}, PlotStyle -> Opacity[0.3]], RegionPlot3D[x^2 + y^2 + z^2 <= 4 && x^2 + (y - 1)^2 + z^2 <= 1, {x, -2, 2}, {y, -2, 2}, {z, -2, 2}] ]

tagussann
質問者

お礼

確かにこの式では一方の球にもう一方が含まれていましたね... なるほど、今手元にMathematicaがないのですぐに結果をお伝えできませんが、ぜひこれで試してみようと思います! maximaで似たような機能を持つ関数を探してみたのですが出てきませんでした。やはり製品ですね。素晴らしい! ありがとうございました。

noname#221368
noname#221368
回答No.1

 これはたぶん最後の手段ですが、AutoDesk社のAutoCad Reguler版は、そういう事ができます。  AutoCadはもともと製図ソフトとして開発されましたが、今では3次元モデルを扱えるようになっています。maxima、mathematicaで定義された立体をAutoCadに取り込むためには、立体の表面データだけをDXFかShapeファイル形式(Textファイルです)で吐き出し、それをAutoCadに読ませ、内部でSolid化するという手順になります。  立体の表面データの事をAutoCadではSurfaceモデルと呼び、それに中身を詰めた立体の事をSolidモデルと呼びますが、2つ以上のSolidモデルに対して、和,差,積のBoolean演算が可能です。  同様な事が可能なものに、3DMAXと3DVIZがあり、これらはCG系のソフトです。案外、maxima、mathematicaと連携してる可能性はあるかも知れません。AutoCad Reguler版,3DMAX,3DVIZらの欠点は、「とても高い」という事です。  なので、CG系のソフトに詳しい人にきいてみるのも、一つの手かなと思いました。

tagussann
質問者

お礼

なるほど。私も一時3Dモデルとしてやろうと思いましたが敷居が高そうだったのであきらめていました。CG系の人は残念ながら周りにいないのですが、手が空いたときにこちらも試してみようと思います。 ありがとうございました。