1

球をパッチに変換した後、パッチの最初の頂点をプロットしたところ、頂点が球上にないことに気付きました。

コード

[faces, vertices] = surf2patch(sphere(),'triangle');
sphere();
hold on;
plot3(vertices(1,1), vertices(1,2), vertices(1,3),'*r');

結果の図は次のようになります

ここに画像の説明を入力

頂点が球の表面にないのはどうしてですか? 私は何か誤解していますか?

ありがとう

4

1 に答える 1

2

説明

関数が別の関数の引数である場合、Matlab はこれを単一の戻り値を持つ関数呼び出しとして扱います。 上記の関数呼び出しのコンテキストでは、

[faces, vertices] = surf2patch(sphere(),'triangle');

次と同等です。

z = sphere();
[faces, vertices] = surf2patch(z,'triangle');

ドキュメントから思い出してください:

[x, y, z] = sphere()3D 座標[x, y, z]のセットを計算します。

z = sphere()同じ[x, y, z]を計算し、 zのみを返します。

sphere()with (nargout = 0) は同じ[x, y, z]を計算し、プロットします。これは、上の図に示されている色球です。

surf2patch.mのソースを調べると、単一のz引数を指定して呼び出すと、 xyの値が自動的に想定されることがわかります。これらの値は、引数なしで呼び出してプロットされた[x, y, z] とは異なります。sphere()

テスト

自分の目で確かめるために、 surf2patch.m内でブレークポイントを有効にして次のコードをトレースし、入力引数を調べます。

[x,y,z] = sphere()
[facesA, verticesA] = surf2patch(x,y,z,'triangle')
[facesB, verticesB] = surf2patch(sphere(), 'triangle')
[facesC, verticesC] = surf2patch(z, 'triangle')

出力[facesA, verticesA]は からのプロットと一致することがわかりますsphere()が、2 番目と 3 番目の呼び出しでsurf2patch()は入力[x, y]値がないため、元の[x,y,zとは異なる値に自動生成されます。 ] .

レッスン

複数の戻り値が予想される場合は、それらを明示的に割り当てます。

于 2012-12-18T01:57:03.423 に答える