2013-07-05 3 views
0

Я хотел бы построить единую сетку высоты в Matlab, у меня есть способ сделать это, но это слишком медленно. В настоящее время у меня есть данные таблицы высоты, которые я конвертирую в x, y, z. Затем я запускаю следующий код:Построение сетки высоты в Matlab

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 нужно знать, получить цвет делает это:

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

Теперь это работает и производит в основном то, что я хочу:

enter image description here

К сожалению, это так медленно. И действительно, чего я могу ожидать, я перебираю сетку высоты и рисую фигуры на экране 1 к 1. К сожалению, я не могу думать ни о чем, что даст тот же результат и будет быстрым в 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 спасибо, но да, мне нужны квадраты, вот как наилучшим образом представлены сетки высоты. –

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