2017-09-12 6 views
0

삼각형 목록의 각 개별 중심점 (중심점)을 계산하고 싶습니다. 지금까지 나는 많은이 쓰기 관리했습니다 : 작동, 오직 나에게 오류 메시지가 제공하지 않습니다여러 삼각형의 중심점 계산

function Triangle_Source_Centroid(V_Epoch0, F_Epoch0) 


     for i = 1:length(F_Epoch0) 


     Centroid_X = F_Epoch0(V_Epoch0(:,1),1) + F_Epoch0(V_Epoch0(:,1),2) + F_Epoch0(V_Epoch0(:,1),3); 
     Centroid_Y = F_Epoch0(V_Epoch0(:,2),1) + F_Epoch0(V_Epoch0(:,2),2) + F_Epoch0(V_Epoch0(:,2),3); 
     Centroid_Z = F_Epoch0(V_Epoch0(:,3),1) + F_Epoch0(V_Epoch0(:,3),2) + F_Epoch0(V_Epoch0(:,3),3); 

     Triangle_Centroid = [Centroid_X; Centroid_Y; Centroid_Z]; 

     end 
end 

:

Subscript indices must either be real positive integers or logicals. 
+0

첫 번째 단계 : 'V_Epoch0'에서 0을 확인하십시오. – gnovice

+0

0을 확인한다는 것은 무엇을 의미합니까? V_Epoch0에는 각 꼭지점의 좌표가 포함됩니다. –

+0

문제가 있습니다. 'F_Epoch0'에 대한 인덱스로 사용하고 있습니다. 지수는 양의 정수 여야합니다. – gnovice

답변

2

변수의 이름을 지정하는 방법을 감안할 때, 내가 추측하고있어를 그 V_Epoch0은 N × 3 매트릭스의 정점 (X, Y 및 Z는 열)이고 F_Epoch0은 얼굴 인덱스의 M x 3 매트릭스입니다 (각 행은 일련의 행 인덱스로 행 번호가 V_Epoch0 인 점을 나타냄). 각 삼각형을 만드십시오). 이게 맞다고 가정하면 ...

이 경우에는 matrix indexing을 사용하여 for 루프를 피할 수 있습니다. 예를 들어, X가 F_Epoch0의 모든 지점에 대한 좌표를 얻으려면, 당신은이 작업을 수행 할 수 있습니다

meanX = mean(allX, 2); 
:

allX = reshape(V_Epoch0(F_Epoch0, 1), size(F_Epoch0)); 

이 그럼 당신은 평균 X는 각 삼각형의 얼굴 좌표를 얻기 위해 열을 가로 질러 mean를 취할 수 있습니다

meanX은 이제 M-by-1 열 벡터입니다. 그러면 Y 이것을 반복 및 Z 좌표 :

allY = reshape(V_Epoch0(F_Epoch0, 2), size(F_Epoch0)); 
meanY = mean(allY, 2); 
allZ = reshape(V_Epoch0(F_Epoch0, 3), size(F_Epoch0)); 
meanZ = mean(allZ, 2); 
centroids = [meanX meanY meanZ]; 

그리고 centroids은 삼각형의 중심 M 별 3 매트릭스 좌표이다.

보너스 : 위의 사실은 그냥이 하나 개의 라인으로 수행 할 수의

모든 :

centroids = squeeze(mean(reshape(V_Epoch0(F_Epoch0, :), [size(F_Epoch0, 1) 3 3]), 2)); 

체크 아웃 multidimensional arrays이 작동하는 방법에 대한 자세한 내용은 설명서를.