私は surfnorm matlab 関数を使用して表面法線を計算しています。次のように使用するとsurfnorm(pcloud(:,:,1),pcloud(:,:,2),pcloud(:,:,3));
、サーフェス法線の図が表示されますが、法線値は保存されません。だから私は使用しました:[Nx,Ny,Nz]=surfnorm(pcloud(:,:,1),pcloud(:,:,2),pcloud(:,:,3));
しかし、[Nx、Ny、Nz]に通常の値を保存するのではなく、通常の数値を表示しません。では、両方をどのように作成しますか?
1 に答える
1
ドキュメントによると、同時に実行したい2つのアクションは相互に排他的であるようです:
[Nx,Ny,Nz] = SURFNORM(X,Y,Z) returns the components of the 3-D surface normal for the surface with components (X,Y,Z). The normal is normalized to length 1. [Nx,Ny,Nz] = SURFNORM(Z) returns the surface normal components for the surface Z. Without lefthand arguments, SURFNORM(X,Y,Z) or SURFNORM(Z) plots the surface with the normals emanating from it. SURFNORM(AX,...) plots into AX instead of GCA.
ただし、作成した後は、次のように、サーフェス法線図から法線ベクトル データを取得できます。
h=figure;
surfnorm(pcloud(:,:,1),pcloud(:,:,2),pcloud(:,:,3));
axesObjs = get(h, 'Children');
dataObjs = get(axesObjs, 'Children');
[Nx,Ny,Nz] = deal(get(dataObjs(1), 'XData').', get(dataObjs(1), 'YData').', get(dataObjs(1), 'ZData').');
複雑に思えますが、計算コストがかかる場合は、これを回避するのがおそらく最善の方法です。
編集:
(1) の後に をh=figure
呼び出して置き換えることができます。figure
h=gcf
(2)ベクトルの私の解釈は、Nx, Ny, Nz
によって描画されたベクトルの位置と方向(必ずしも正規化されていない)の座標、およびsurfnorm
追加のNaN
値を含むため、印刷する[Nx,Ny,Nz]
と次のようになります。
0 0 -1.0000 <-- position of origin
0 0 -1.0000 <-- direction of vector
NaN NaN NaN <-- nonsense
-0.5878 0 -0.8090
-0.7036 -0.0344 -0.9684
NaN NaN NaN
-0.9511 0 -0.3090
-1.1341 -0.0543 -0.3685
NaN NaN NaN
-0.9511 0 0.3090
-1.1341 -0.0543 0.3685
NaN NaN NaN
....
于 2013-07-25T08:11:45.570 に答える