1

3D ジオメトリの例を次に示します。

dat=Import["ExampleData/747.3ds.gz", ImageSize -> Medium]

この 3D ジオメトリの BSplineFunction を取得したい場合、最も簡単な方法は何ですか?

次のコマンドを使用して、Mathematica でパーツを確認できます。

parts = Length[(dat // First // Last)];

これが抽出後の 3D ポイントです。

ListPointPlot3D[Flatten[Map[((dat // First // Last)[[#]] /. 
  GraphicsComplex[a_, b_] -> List[a]) &, Range[parts]], 1]]

任意の 3D グラフィックス複合体から BSpline 関数を作成できる一般的な方法があることを願っています。一般的な方法で、Mathematica の 3D 表現を連続 BSplines 表現に変換できると思います。

ここで、ベリサリウスが示した例に従って詳しく説明します。

v={{0,0,0},{2,0,0},{2,2,0},{0,2,0},{1,1,2}};
i={{1,2,5},{2,3,5},{3,4,5},{4,1,5}};
Graphics3D[{Opacity[.5],GraphicsComplex[v,Polygon[i]]}]

ここに画像の説明を入力

この例では、BSpline サーフェスの入力を簡単に作成できます。

dat = Table[Map[v[[#]] &, i[[j]]], {j, 1, Length[i]}];

下にある頂点を考慮した場合に出てくるサーフェスを見てみましょう。

Show[
     (* Vertices *)
     ListPointPlot3D[v,PlotStyle->{{Black,PointSize[.03]}}],
     (* The 3D solid *)
     Graphics3D[{Opacity[.4],GraphicsComplex[v,Polygon[i]]}],
     (* The BSpline surface *)
     Graphics3D[{Opacity[.9],FaceForm[Red,Yellow],
                 BSplineSurface[dat, SplineDegree-> {1,2},SplineClosed->{True,False}]}
                ],
     Boxed-> False,Axes-> None
    ]

ここに画像の説明を入力

このサーフェスが形成されたら、何らかの方法で BSplineFunction を作成できると思いました。しかし、私が得るものは、上記の表面とはまったく異なります。

func = BSplineFunction[dat, SplineDegree -> {1, 2},SplineClosed -> {True, False}];
Plot3D[func[x, y], {x, 0, 1}, {y, 0, 1}, Mesh -> None,PlotRange -> All]

ここに画像の説明を入力

ここで概念的な間違いを犯していますか?

4

2 に答える 2

2

あなたの質問にはさらに説明が必要だと思います。

.3DS は、主に次のようなポリゴン セットです。

v = {{0, 0, 0}, {2, 0, 0}, {2, 2, 0}, {0, 2, 0}, {1, 1, 2}};
i = {{1, 2, 5}, {2, 3, 5}, {3, 4, 5}, {4, 1, 5}};
Graphics3D[{Opacity[.5], GraphicsComplex[v, Polygon[i]]}]

ここに画像の説明を入力

そのため、スプライン サーフェスを取得してこれをモデル化する方法は明らかではありません。

おそらく、この例で少し詳しく説明できます。

チッ!

于 2011-06-07T03:10:57.187 に答える
2

マイナーな詳細: スプラインが少し歪んでいます。これは、 の選択が原因ですSplineDegree。ピラミッドの場合、{1,2} ではなく {2,1} を選択します。これにより、現在持っているソフトアイスコーンの代わりにコーンが得られます. もちろん、それはすべて恣意的なものであり、美しさは見る人の目にあります。

ここに画像の説明を入力

の 3D プロットが、同じコントロール ポイントを持つ の と同じBSplineFunction結果をもたらさない理由について質問します。問題は、 の 2 つのパラメーターがデカルト座標系の x と y に対応すると仮定していることです。まあ、そうではありません。これらのパラメーターは、サーフェスの内部パラメトリック記述の一部であり、これら 2 つのパラメーターを変更すると一連の 3D ポイントが生成されるため、ここで使用する必要があります。Graphics3DBSplineSurfaceBSplineFunctionParametricPlot3D

したがって、に変更すると、すべて問題ないことPlot3DParametricPlot3Dわかります。

これが最後の質問の答えになることを願っています。これは、3D ポリゴン ベースのモデルをスプライン ベースのモデルに変換する方法についての質問にも答えていますか? 直面する問題の 1 つは、補間関数の一種として、スプラインが通常その制御点を通過しないことです。

于 2011-06-07T13:24:32.213 に答える