- Codice: Seleziona tutto
lasi2rasi=diff(pelvis(:,:,[1,2]),1,3)
opl_0=point2line(pelvis(:,:,1),pelvis(:,:,2),sacr);
xpl_0=opl_0-sacr;
[temp,xpl_0]=mvarray(xpl_0);
ypl_0=cross(lasi2rasi,xpl_0);
[temp,ypl_0]=mvarray(ypl_0); %rende ypl_0 di modulo unitario
zpl_0=cross(xpl_0,ypl_0);
[temp,zpl_0]=mvarray(zpl_0);
R0pl=cat(3,xpl_0,ypl_0,zpl_0);
R0pl=permute(R0pl,[2,3,1]);
T0pl=[R0pl permute(opl_0,[2,3,1])]
T0pl(4,4,:)=1;
allora questa parte di codice dice che opl_0 è il centro del bacino calcolato attraverso un vettore che proietta un punto sull'osso sacro (più o meno) su un segmento che si trova tra due marker posti anteriormente al bacino (uno a destra ed uno a sinistra). Questa è l'origne del sistema di riferimento visto da una telecamera. xpl_0 ypl_0 e zpl_0 sono i versori del sistema di riferimento della telecamera. R0pl è la matrice di rotazione e T0pl è la matrice di rototraslazione
- Codice: Seleziona tutto
T0pl=[R0pl opl_0;0 0 0 0 1]
il numero di zeri è pari al numero di elementi sull'ultima riga meno l'ultimo che è 1. Ora devo invertire la matrice T0pl in Tpl0 sioè devo passare dal sistema di riferimento della telecamera al sistema di riferimento del bacino!!! Questa operazione si fa algebricamente come
- Codice: Seleziona tutto
T0pl=[R0pl^T -R0pl^T*opl_0; 0 0 0 0 1]
il mio problema è che non posso trasporre semplicemte la matrice T0pl ma devo trovare una strada alternativa proprio come ho fatto per la sua costruzione. Questo è una problema di trasformazioni omogenee molto usato in robotica...ma io di robotica ne so un po' pochina...
Se vi serve mi vetto a disposizione tutto il codice del "programma"..grazie

