2015-03-24 2 views
2

В настоящее время я пытаюсь построить 3D-потоки. Я хочу, чтобы трубки были окрашены в соответствии с их соответствующей скоростью (например, slow = blue, fast = red).Matlab: Как я могу контролировать цвет графика потока?

Чтобы быть более точным, у меня есть три 3D-матрицы, содержащие скорость в направлениях x, y и z. Цвет полотенец должен быть sqrt(vx^2+vy^2+vz^2). При использовании streamtube(x,y,z,vx,vy,vz,sx,sy,sz) трубки окрашены в соответствии с их координатой z, что бесполезно, потому что это 3D-график.

ответ

2

Ну, это было непросто (это должен быть встроенный вариант), но, изменяя CData каждой трубки (каждый из них имеет собственный графический объект), вы можете достичь желаемого результата. Вот пример

load wind 
[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15); 
h=streamtube(x,y,z,u,v,w,sx,sy,sz); 
drawnow 
view(3) 
axis tight 
shading interp; 

Это дает такую ​​картину: enter image description here

но делает это:

vel=sqrt(u.^2+v.^2+w.^2); %// calculate velocities 
for i=1:length(h) 
    %// Modify the colour data of each tube 
    set(h(i),'CData',interp3(x,y,z,vel,get(h(i),'XData')... 
     ,get(h(i),'YData'),get(h(i),'ZData'),'spline')) 
end 
drawnow 
view(3) 
axis tight 
shading interp; 

дает этот результат enter image description here

ПРИМЕЧАНИЯ:

1) Я не знаю, если это полностью правильно, я не знаю, как проверить его

2) Вы должны интерполировать данные по скорости из точек, где это известно на вершинах streamtubes

3) Я нашел опцию интерполяции spline, чтобы работать лучше всего, но другие варианты могут работать лучше в других случаях.

+0

Это фантастика! +1. Spline interp должен быть в целом лучшим для этого, –

+0

Вот что я искал! Я не знал, что можно получить доступ к каждому потоковому потоку с помощью функции «h (i)». Спасибо! – Dominic

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