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]의 정상 값을 저장하지는 않았지만 정상적인 수치는 표시하지 않았습니다. 둘 다 만드는 방법?surfnorm을 표시하고 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').'); 

복잡하게 보입니다. 그러나 계산 비용 인 경우이 문제를 피하는 것이 가장 좋은 방법 일 것입니다. 입니다.

편집 : h=gcf 다음 figure를 호출

(1) 당신은 대체 할 수 있습니다 h=figure.

(2) Nx, Ny, Nz 벡터의 나의 해석은 당신이 볼 수 [Nx,Ny,Nz] 당신은 인쇄, 그래서 만약 surfnorm에 의해 그려진 위치와 벡터의 방향 (반드시 정규화되지 않음)에 대한 좌표뿐만 아니라 추가 NaN 값을 포함 즉 예 :

  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

이 오류는 "오류를 사용하여 오류가 발생합니다. ==>이 줄에서 잘못된 핸들을 얻으십시오"axesObjs = get (h, 'Children'); " – Tak

+0

예 4 줄의 코드를 사용하고 있습니다. – Tak

+0

@ user1460166 : 내 생각에이 버전은 matlab 버전 문제입니다. 어떤 버전을 사용하고 있습니까? Surfnorm 객체의 데이터 저장은 버전간에 변경되었을 수 있습니다. 그것은 단지 방법을 알아내는 것입니다 :'h'와'get (h)'결과를 게시하십시오 –

관련 문제