Skocz do zawartości

Matlab Wykres 3D z punktów


Pomocna odpowiedź

Napisano

Witam.

\Mam zapewne prosty problem ale nie potrafię go ogarnąć.

Wyznaczyłem przestrzeń roboczą manipulatora. Mam zatem macierz M(100000,3), w której są współrzędne punktów. Każdy punkt w osobnym wierszu. Muszę te punkty wyświetlić na wykresie 3d.

Użyłem zatem takiego polecenia:

plot3(M(:,1),M(:,2),M(:,3))

jednak wykres jest mało czytelny.

Chciałbym uzyskać efekt taki jak tutaj:

http://www.mathworks.com/matlabcentral/fileexchange/9519

jednak nie potrafię przerobić tamtego kodu. Matlab nie zna w ogóle funkcji plot3k.

Mam wersję Matlab R2012a x64.

Proszę bardzo o pomoc i kilka słów wyjaśnienia jak to zrobić.

Pozdrawiam

Witam.

Właśnie kurcze używałem surf i mesh i wychodzą mi jakieś głupoty. Zaraz wrzucę zdjęcia to będzie widać o co chodzi.

Problem wygląda tak:

Punkty sięgaja wzdłuż osi Z do wartości 293. Gdy używam funkcji plot3 to wykres wygląda ok. Ale gdy używam surf lub mesh to punkty na wykresie sięgają tylko do 262 wzdłuż osi Z. Prawdopodobnie źle używam funkcji surf i mesh, dlatego wrzucę kody i wykresy. Może mi pomożecie to rozwiązać.

Funkcji plot używam tak:

plot3(M(:,1),M(:,2),M(:,3),'r.')

A oto efekty:

Funkcji surf używam tak:

>> [X,Y]=meshgrid(-120:120);
>> x=M(:,1);
>> y=M(:,2);
>> z=M(:,3);
>> [xi,yi,zi]=griddata(x,y,z,X,Y);

Warning: Duplicate data points have been detected and removed - corresponding values have been averaged. 
> In griddata>linear at 205
 In griddata at 125 

>> w=interp2(xi,yi,zi,X,Y);
>> surf(X,Y,w)
>> shading interp

wyskakuje jekiś warning. Niebardzo wiem o co chodzi.

Efekty wyglądaja tak:

Funkcji mesh używam podobnie:

>> x=M(:,1);
>> y=M(:,2);
>> z=M(:,3);
>> [xi,yi,zi]=griddata(x,y,z,X,Y);

Warning: Duplicate data points have been detected and removed - corresponding values have been averaged. 
> In griddata>linear at 205
 In griddata at 125 

>> w=interp2(xi,yi,zi,X,Y);
>> mesh(X,Y,w)

A efekty przedstawiają się tak:

  • 2 tygodnie później...

Przypuszczam, że otrzymana zależność nie jest funkcją i dlatego plot3 działa, bo tam podajesz po prostu dowolną ilość punktów, a mesh i surf rysują funkcję tzn że dla danego x i y może być tylko jeden z. Stąd w warningu pisze że "podwójne" punkty zostały zastąpione jednym, którego wartość jest średnią z wartości dla tych współrzędnych. (Przecież przestrzeń robocza jest bryłą a nie powierzchnią)

edit: jeśli ma Ci to pomóc, to wrzucam link do funkcji plot3k

http://www.mathworks.com/matlabcentral/fileexchange/9519-color-coded-3d-scatterplot/content/plot3k.m

Próbowałeś użyć funkcji scatter3?

http://www.mathworks.com/help/matlab/ref/scatter3.html

Rysuje ona po prostu punkt po punkcie, zawsze to jakieś rozwiązanie 😉

//Edit: a do zrobienia mapy kolorów na wykresie możesz użyć przecież funkcji caxes.

//Edit2: http://www.mathworks.com/support/solutions/en/data/1-DARKTD/index.html?product=SL&solution=1-DARKTD

//Edit3:

Jak to zwykle bywa, w skrypcie kodu dużo, a większość to obsługa błędów 😃

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...