3

この質問は少し奇妙に思えるかもしれませんが、私の目的にとってはそれほどクレイジーではありません。簡単ですが、私に従ってください。

狙い

私の目的は、三次元グラフをプロットすることです。

問題

問題は、このグラフの作成を開始するために手に持っている資料です。実際には、2D 空間にポイントのコレクションがあります (したがって、2 つの実数の順序付けられた値のタプル)。これらのポイントのコレクションを配列に格納して、2D ダイアグラムにプロットすることを検討してください。これらのポイントのまばらなビューが表示されます。

2 番目のステップは次のとおりです。これらの点を含む面を考え、それらの点が描かれている平面に直交する 3 番目の軸を作成します。目的は、数値スカラー値をすべての点に割り当てることです (対を受け入れて数値を返す関数を使用)。したがって、グラフはすべてのポイントから始まり、割り当て関数に従って特定の値を持つバーを表示する必要があります。

Mathematica でこれを達成するにはどうすればよいですか?

ちょっとしたメモ

基本的に、2次元空間のポイントもグラフで接続されています。棒の上部を、2次元グラフで基点が接続されている他の棒の上部に接続することは可能ですか?

その他の注意事項

私のグラフは表面である必要はありませんが、参照する対応点が配置されている正確な場所の平面に配置された棒の集まりです。しかし、棒以外の曲面を描く良いヒントがあれば、喜んで受け入れます。

私がはっきりしていたことを願っています。私は Mathematica 8 を持っているので、すべての機能が利用できることを指摘したいと思います。ありがとうございました。

4

1 に答える 1

6

Graphics3Dこれは、プリミティブを使用して実行できます。いくつかのデータから始めましょう

(* a list of 2D coordinates *)
points2D = RandomReal[{0, Pi}, {50, 2}];

(* some edges as a list of pairs of vertex indices *)
edges = Union[Flatten[MapIndexed[Sort /@ Thread[{#2[[1]], 
     Nearest[points2D -> Automatic, #, 4]}] &, points2D], 1]];

(* constructing list of 3D coordinates *)
f[{x_, y_}] := 2 + Sin[x y]
points3D = {##, f[{##}]} & @@@ points2D;

実際のプロットは次のように作成できます (幅はバーの幅の半分です)。

With[{width = .02},
  Graphics3D[{{LightBlue, EdgeForm[None],
    Cuboid[{#1, #2, 0} - width {1, 1, 0}, {##} + width {1, 1, 0}] & @@@ points3D},
   {Orange,
    GraphicsComplex[points3D, Line[edges]]}}, 
  Lighting -> "Neutral", 
  BoxRatios -> {1, 1, .6}]]

Mathematica グラフィックス

于 2012-01-24T10:08:37.743 に答える