1

私は surfnorm matlab 関数を使用して表面法線を計算しています。次のように使用するとsurfnorm(pcloud(:,:,1),pcloud(:,:,2),pcloud(:,:,3));、サーフェス法線の図が表示されますが、法線値は保存されません。だから私は使用しました:[Nx,Ny,Nz]=surfnorm(pcloud(:,:,1),pcloud(:,:,2),pcloud(:,:,3));しかし、[Nx、Ny、Nz]に通常の値を保存するのではなく、通常の数値を表示しません。では、両方をどのように作成しますか?

4

1 に答える 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呼び出して置き換えることができます。figureh=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 に答える