3

デカルト空間での点の位置を表す、MATLAB にインポートする大量のデータがあります。標準の XYZ データを保存および処理するための最も一般的な方法は次のうちどれですか?

オプション1

X、Y、Z 座標を別々の n * 1 ベクトルとして保存します (おそらく構造内?)。これにより、次のようになります。

  • 簡単なプロット:plot3(X, Y, Z)
  • 少し複雑な個々のポイントの抽出N = [X(i), Y(i), Z(i)]
  • ポイントのセット全体を関数に渡すと、渡すさまざまな引数の数が増えます。

オプション #2

X、Y、Z 座標を 1 つの n * 3 ベクトルとして保存します。

  • プロットは少し難しいです:plot3(XYZ(:, 1), XYZ(:, 2), XYZ(:, 3))
  • 個々のポイントを抽出する方が簡単です。N = XYZ(i, :)
  • ポイントのセット全体を渡すのは簡単です - 変数は 1 つだけです

これに基づいて、私は 2 番目がより一般的であると思います。


ただし、処理するデータの一部は、グリッドの形式が重要なグリッド形式で読み込まれるため、より困難です。これは、データの生の形式が (n*m) * 3 行列ではなく、* m * 3 行列であることを意味します。点 X(i, j) が点 X(i, j+1) の隣にあるという事実は重要です。ここでも、2 つのオプションが提示されます。

オプション1

X、Y、Z の各座標を n * m 行列として保存します。

オプション #2

すべての点を n * m * 3 行列として格納します。

ここでは 2 番目の方法を使用したいと思いますが、プロットなどのいくつかのオプションは非常にばかげています。

X = XYZ(:, :, 1);
Y = XYZ(:, :, 2);
Z = XYZ(:, :, 3);
plot3(X(:), Y(:), Z(:));

特にビジョンとグラフィックスのコミュニティでは、これに関する規約が必要だと感じています。

4

3 に答える 3

3

これを行うための本当に最善の方法はないと思います。あなたにとって最善の方法は、あなたの人生を最も便利にする方法です。

多くの 3 次元プロットを行い、データを 1 つの結合形式で持ち歩きたい場合は、簡単な plot3d ツールを作成します。nx3 配列 (または必要に応じて構造体) を取得するように設定し、plot3 を呼び出して 3 つの列を分割します。

% =============================
function h = plot3d(data,varargin)
% plots 3-d data (more help is good here)
h = plot3(data(:,1),data(:,2),data(:,3),varargin{:});
if nargout == 0
  clear h
end
% =============================

データの形状にいくつかのエラー チェックを追加し、はるかに優れたヘルプを追加したいと思いますが、一般的な考え方は理解できるはずです。

個人的には、3 次元データを 1 つの nx3 配列で持ち歩くのが好きです。他の種類のものについては、私見ですが、構造が最適です。たとえば、ドロネー三角形分割からの頂点とテッセレーション情報の両方を 1 つの構造に詰め込むことは、私には理にかなっています。

matlab を拡張して、ユーザーと連携し、自分の働き方や考え方で作業できるようにします。

于 2010-09-12T12:21:46.823 に答える
0

質問の後半について考えたことがあります。データを (nxmx 3 ではなく) 3 xnxm 行列として格納すると、多くの操作が簡単になります。

  • 個々の座標は次のように抽出できますN(:, i, j)
  • すべての X、Y、または Z 座標はN(1, :)、 、N(2, :)またはN(3, :)
  • すべてのデータを一度に関数に渡すことができます
  • データの元の形式を保持します。
  • 3 x (n*m) 行列に簡単に変換できますN(:, :)

これは適切な解決策のように思えますか?

于 2010-09-12T12:26:10.820 に答える
0

あなたの質問の前半への答えとして、nx 3 (または 3 xn) 行列を維持する方が簡単です。行列の数学の構文が簡単になり、より効率的になります。一般に、おそらく多くの数学演算を実行し、最後に表示ロジックを少し実行することになります。そのため、たとえばplot3.

ご質問の後半ですが、「グリッド」の意味がよくわからないのでお答えできません!

于 2010-09-12T11:56:17.963 に答える