2013-07-25 3 views
1

Я использую функцию surfnorm matlab для вычисления нормальной поверхности. Когда я использую его как: surfnorm(pcloud(:,:,1),pcloud(:,:,2),pcloud(:,:,3));, появляется нормальная норма поверхности, но нормальные значения не сохраняются. Поэтому я использовал: [Nx,Ny,Nz]=surfnorm(pcloud(:,:,1),pcloud(:,:,2),pcloud(:,:,3));, но не сохранил нормальные значения в [Nx, Ny, Nz], но не отобразил нормальную цифру. Итак, как сделать оба?Отображать серфинг и сохранять значения в Matlab

ответ

1

Согласно документации, два действия, которые вы хотите выполнить одновременно по всей видимости, являются взаимоисключающими:

[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').'); 

это кажется запутанным, но если это вычислительное расходы вы стремитесь избежать этого, вероятно, лучший способ сделать тыс является.

Edit:

(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 
    .... 
+0

его сообщение об ошибке «Ошибка использования ==> get Invalid handle» в этой строке «axesObjs = get (h,« Children »); – Tak

+0

да Я использую четыре строки кода, который вы написали – Tak

+0

@ user1460166: я предполагаю, что это проблема с версией в matlab, какую версию вы используете? Хранение данных в объекте surfnorm возможно изменилось между версиями. Речь идет только о том, как: пожалуйста, опубликуйте результат 'h' и' get (h) ' –

Смежные вопросы