2013-07-05 2 views
0

Matlab에서 균일 한 높이 격자를 플롯하고 싶습니다.이 방법은 있지만 너무 느립니다. 현재 x, y, z 점으로 변환하는 높이 그리드 데이터가 있습니다. 내가 원하는Matlab에서 높이 격자 그리기

function [colour] = getColour(min, max, height) 
    colour = floor((max-height)/(max-min)+1); 
end 

을 지금이 작품과 본질적으로 생산 :

이 경우
figure; 
    hold on; 
    axis equal; 
    minHeight = min(z) 
    maxHeight = max(z) 
    gX = HG.xCellSize/2; 
    gY = HG.yCellSize/2; 
    for i = 1:length(x) 

     colour = getColour(minHeight, maxHeight, z(i)); 

     p1X = [x(i)-gX, x(i)+gX, x(i)+gX, x(i)-gX]; 
     p1Y = [y(i)+gY, y(i)+gY, y(i)-gY, y(i)-gY]; 
     p1Z = [z(i), z(i), z(i), z(i)]; 
     p1C = [colour, colour, colour, colour]; 

     fill3(p1X, p1Y, p1Z, p1C) 

    end 

당신이 desperatley 색상이가하는 얻을 알 필요가 : 나는 다음 코드를 실행

enter image description here

불행히도 너무 느립니다. 그리고 정말로 기대할 수있는 것은 무엇입니까? 저는 높이 그리드를 반복하고 화면 1에 모양을 그려 넣었습니다. 불행히도 Matlab에서 똑같은 결과를 내고 빠를 것이라고는 생각할 수 없습니다. 나는 MATLAB 전문가가 더 좋은 아이디어를 가지고 있기를 바랍니다.

답변

0

나는 그것을 알아 냈다. 패치를 사용하는 것이 훨씬 빠릅니다 :

axis equal; 
    minHeight = min(z); 
    maxHeight = max(z); 
    gX = HG.xCellSize/2; 
    gY = HG.yCellSize/2; 
    patchX = []; 
    patchY = []; 
    patchZ = []; 
    for i = 1:length(x) 

     p1X = [x(i)-gX; x(i)+gX; x(i)+gX; x(i)-gX; ]; 
     patchX = [patchX, p1X]; 
     p1Y = [y(i)+gY; y(i)+gY; y(i)-gY; y(i)-gY]; 
     patchY = [patchY, p1Y]; 
     p1Z = [z(i); z(i); z(i); z(i)]; 
     patchZ = [patchZ, p1Z]; 

    end 

    patch(patchX, patchY, patchZ, patchZ); 
    colorbar; 
+0

3D 공간에서 정사각형 마커가 실제로 표시되어야합니까? 'scatter3 (x, y, z, HG.xCellSize, z)'는 어떨까요? 마커를 선택할 수도 있지만 마커는 항상 z 축보다는 뷰 평면을 향한 방향으로 그려집니다. – Peter

+0

@Peter 감사합니다. 그렇습니다. 그렇기 때문에 사각형이 필요합니다. 높이 그리드가 가장 잘 표현되는 방식입니다. –

관련 문제