2014-02-23 5 views
2

Delaunay 삼각 분할을 적용한 후에 형성된 각 삼각형 영역을 찾을 수 있습니까? matlab에 어떤 함수가 있나요? 친절하게 나를 명확히해라. 사전 감사Delaunay 삼각형 분할의 결과 삼각형 영역 찾기

+3

직접 작성할 수 있습니다. ['delauny'] (http://www.mathworks.com/help/matlab/ref/delaunay.html)의 출력을 확인하십시오. 그것은 당신에게 점수의 지수를 제공합니다. 그런 다음 3면을 계산하고 [this] (http://www.mathsisfun.com/geometry/herons-formula.html) 수식을 사용할 수 있습니다. –

답변

0

이 작업은 polyarea - dim 옵션을 사용하여 수행 할 수 있습니다.

tri = delaunay(x,y); 
areas = polyarea(tri(x),tri(y),2); 
1

나도 같은 의문에 직면했지만, 다행히도, 나는 그것을 깰 수 있었다,이 시도 :

tri = delaunay(x,y); 
areas = polyarea(x(tri'),y(tri'),2); 

이 당신에게 형성된 각 삼각형의 영역을 제공 할 것입니다.

문제가 있으면 알려주세요.

P.S : tri'은 행렬의 전치를 의미합니다.

+0

안녕하세요 ... thnx fr ur reply ...하지만 160 개의 삼각형이 있습니다. 난 모든 삼각형의 영역을 찾을 필요가 ... 위의 코드로 대답을 얻을 수 없었다 – user3260487

+0

안녕하세요, 나는 왜 그 될 것이라고, 벡터 영역이 귀하의 경우에는 160 * 1 벡터 될 것입니다 궁금해. 원하는 경우 작업 공간에서 동일한 것을 볼 수 있습니다. 마지막으로 벡터의 인덱싱은 tri의 인덱싱과 동일합니다. 필요하다면 더 많이 물어보십시오 :) – Vishu

+0

설명을 위해서 ... '모든 삼각형의 면적'이란 각 삼각형의 면적 또는 모든 삼각형의 면적의 합을 의미합니까? – Vishu

0

이 솔루션은 작동하지만 벡터화되지는 않습니다.

DT = delaunayTriangulation(X,Y); 

NTriangles = size(DT.ConnectivityList,1); 

% Triangles' Area Calculation (Try to vectorize) 
Areas = zeros(NTriangles,1); 
for i = 1:NTriangles 
    PointIndexes = DT.ConnectivityList(i,:); 
    Areas(i) = polyarea(DT.Points(PointIndexes,1),DT.Points(PointIndexes,2)); 
end