cariaf
Artikelen: 0
Berichten: 4
Lid geworden op: do 20 mar 2014, 21:50

Matlab 3D animatie van mens

Hoi allemaal,

k probeer een 3D animatie van een mens te maken maar kom er niet helemaal uit. Dit heb ik tot dusver maar het leidt niet tot het resultaat zoals ik het wil:

 

Code: Selecteer alles

%% clear memory
clear;
close all;
%% Data
data = importdata('gait100.txt');
%% Settings
nTime = max(size(data.data(:,2)));
%creating seperate X, Y and Z matrices
X = data.data(:, [1 : 3 : 123]); % Creates matrix from all x-positions
Y = data.data(:, [2 : 3 : 123]); % Creates matrix from all y-positions
Z = data.data(:, [3 : 3 : 123]); % Creates matrix from all z-positions
%% animation
for i = 1: nTime
cla;
plot3(X(i,:), Y(i,:), Z(i,:),'o');
drawnow;
end
hold off;
Ik heb het tekst bestand met de posities ook geupload.
Bijlagen
gait100
(89.28 KiB) 242 keer gedownload
cariaf
Artikelen: 0
Berichten: 4
Lid geworden op: do 20 mar 2014, 21:50

Re: Matlab 3D animatie van mens

EDIT

het is me gelukt om er iets meer van te maken maar ik vind de 3D plot nog steeds niet erg mooi. Daarnaast, vind ik het ook moeilijk om te zien welke as nou x y of z is in de 3D plot. Ik zou graag de grootste afstand tussen de voeten willen berekenen, welke as moet ik hier dan voor pakken?

 

Code: Selecteer alles

%% clear memory
clear;
close all;
%% Data
data = importdata('gait100.txt');
%% Settings
nTime = max(size(data.data(:,2)));
% creating seperate X, Y and Z matrices
X = data.data(:, [1 : 3 : 123]); % Creates matrix from all x-positions
Y = data.data(:, [2 : 3 : 123]); % Creates matrix from all y-positions
Z = data.data(:, [3 : 3 : 123]); % Creates matrix from all z-positions
% creating min and max for X, Y and Z
Xmax = max(max(X));
Ymax = max(max(Y));
Zmax = max(max(Z));
Xmin = min(min(X));
Ymin = min(min(Y));
Zmin = min(min(Z));
%% 3D-animation
axis([Xmin Xmax Ymin Ymax Zmin Zmax]);
for iLoop = 1 : 10;
for i = 1: nTime
hold on;
cla;
plot3(X(i,:), Y(i,:), Z(i,:),'o');
drawnow;
end
end
hold off;
%% 2D-animation
axis([-1000 1000 0 2000]);
for iLoop = 1 : 10;
for i = 1: nTime
hold on;
cla;
plot(Y(i,:), Z(i,:),'o');
drawnow;
end
end
hold off;
JorisL
Artikelen: 0
Berichten: 555
Lid geworden op: ma 30 jul 2007, 22:59

Re: Matlab 3D animatie van mens

Voor de assen, xlabel('X'); geeft een label op de X-as.
Zo bestaat er ook ylabel en zlabel.
 
Ik zou trouwens aanraden om ergens anders een animatie mee te maken. Ikzelf heb het ooit geprobeerd met een simpele Lennard-Jones vloeistof.
Het is heel traag naar mijn mening.
cariaf
Artikelen: 0
Berichten: 4
Lid geworden op: do 20 mar 2014, 21:50

Re: Matlab 3D animatie van mens

Ik moet dit helaas met matlab doen voor een tentamen.. Met die assen is het nu gelukt, dankje! Weet je hoe ik in de datasheet (zonder het zelf op te gaan zoeken in de figure) kan uitvinden welke datakolom bij welke marker hoort?
JorisL
Artikelen: 0
Berichten: 555
Lid geworden op: ma 30 jul 2007, 22:59

Re: Matlab 3D animatie van mens

cariaf schreef: Ik moet dit helaas met matlab doen voor een tentamen.. Met die assen is het nu gelukt, dankje! Weet je hoe ik in de datasheet (zonder het zelf op te gaan zoeken in de figure) kan uitvinden welke datakolom bij welke marker hoort?
 
Ik snap je tweede vraag niet meteen. In je plot heb je voor elk punt (X,Y,Z) dezelfde marker (open bolletje lijkt me).
 
Wat is de vorm van je data bestand? Kan je ook meteen even uitleggen wat je bijvoorbeeld met volgend commando doet:

Code: Selecteer alles

X = data.data(:, [1 : 3 : 123]);
 
Op deze manier kom ik er niet echt uit, ik genereerde mijn data altijd in matlab zelf daarmee.
Ik vermoed dat je X,Y en Z multidimensionale arrays zijn maar ben niet meteen zeker.

Terug naar “Praktische en overige technische wetenschappen”