17.06.2013 Views

Analisi e sintesi dei gesti comunicativi per gli - Maurizio Mancini

Analisi e sintesi dei gesti comunicativi per gli - Maurizio Mancini

Analisi e sintesi dei gesti comunicativi per gli - Maurizio Mancini

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Appendice A<br />

VII.4 Il metodo ModelDraw della classe Joint<br />

Nella sezione 2 del paragrafo VI.3 avevamo descritto l’algoritmo sul quale è basato<br />

il metodo ModelDraw() della classe Joint. In questo paragrafo riportiamo il co-<br />

dice commentato della sua implementazione nel linguaggio C++:<br />

void Joint::ModelDraw(CString jointname,coord3d totaltranslation,GLfloat* vertex_new,<br />

GLfloat* normal_new){<br />

//convertire il nome della giuntura in una stringa standard c++<br />

std::string namestring(name.GetBuffer(0));<br />

//ottere il nome dell’array <strong>dei</strong> vertici associati alla giuntura<br />

int*jointVertices= GetPolySet(namestring);<br />

//e il suo numero di elementi<br />

int size= GetPolySetSize(namestring);<br />

//variabili locali<br />

int whichVertex;<br />

int i;<br />

coord3d center;<br />

Joint* prevjoint;<br />

alg3::vec3 vertex_rot;<br />

alg3::vec3 normal_rot;<br />

alg3::mat3 rotmatx(alg3::vec3(0,0,0),alg3::vec3(0,0,0),alg3::vec3(0,0,0));<br />

alg3::mat3 rotmaty(alg3::vec3(0,0,0),alg3::vec3(0,0,0),alg3::vec3(0,0,0));<br />

alg3::mat3 rotmatz(alg3::vec3(0,0,0),alg3::vec3(0,0,0),alg3::vec3(0,0,0));<br />

alg3::mat3 tempmat(alg3::vec3(1,0,0),alg3::vec3(0,1,0),alg3::vec3(0,0,1));<br />

//aggiungere la traslazione di questa giuntura alla traslazione totale, data come parametro<br />

totaltranslation.x=totaltranslation.x+this->translation.x;<br />

totaltranslation.y=totaltranslation.y+this->translation.y;<br />

totaltranslation.z=totaltranslation.z+this->translation.z;<br />

//<strong>per</strong> ruotare questa parte del corpo occorre spostarsi nel centro di rotazione locale<br />

//ed effettuare la rotazione della giuntura associata<br />

//poi il tutto va ripetuto sulle giunture fi<strong>gli</strong>e<br />

prevjoint=this;<br />

center.x=totaltranslation.x;<br />

center.y=totaltranslation.y;<br />

center.z=totaltranslation.z;<br />

//la rotazione va applicata a ritroso a tutte le giunture precedenti fino alla radice<br />

while(prevjoint!=NULL)<br />

{<br />

//calcolare tre matrici di rotazione, una intorno ad ognuno de<strong>gli</strong> assi<br />

rotmatx[0][0]=1;<br />

rotmatx[0][1]=0;<br />

rotmatx[0][2]=0;<br />

rotmatx[1][0]=0;<br />

rotmatx[1][1]=Cosine((int)(prevjoint->rotation.x));<br />

rotmatx[1][2]=-Sine((int)(prevjoint->rotation.x));<br />

rotmatx[2][0]=0;<br />

rotmatx[2][1]=Sine((int)(prevjoint->rotation.x));<br />

rotmatx[2][2]=Cosine((int)(prevjoint->rotation.x));<br />

rotmaty[0][0]=Cosine((int)(prevjoint->rotation.y));<br />

rotmaty[0][1]=0;<br />

rotmaty[0][2]=Sine((int)(prevjoint->rotation.y));<br />

rotmaty[1][0]=0;<br />

rotmaty[1][1]=1;<br />

rotmaty[1][2]=0;<br />

rotmaty[2][0]=-Sine((int)(prevjoint->rotation.y));<br />

rotmaty[2][1]=0;<br />

rotmaty[2][2]=Cosine((int)(prevjoint->rotation.y));<br />

rotmatz[0][0]=Cosine((int)(prevjoint->rotation.z));<br />

rotmatz[0][1]=-Sine((int)(prevjoint->rotation.z));<br />

rotmatz[0][2]=0;<br />

rotmatz[1][0]=Sine((int)(prevjoint->rotation.z));<br />

rotmatz[1][1]=Cosine((int)(prevjoint->rotation.z));<br />

rotmatz[1][2]=0;<br />

rotmatz[2][0]=0;<br />

rotmatz[2][1]=0;<br />

rotmatz[2][2]=1;<br />

111

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!