Il Bar dell'Ingegneria

Quaderni e quadernoni

« Older   Newer »
 
  Share  
.
  1. afazio
        +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,169
    Reputation
    +295

    Status
    Offline
    La mia curiosità mi ha spinto a provare a vedere come applicare i quaternioni nelle rotazioni.
    In sostanza si tratta di costruire la matrice M dati l'asse di rotazione n e l'angolo ϑ di rotazione.

    Il problema fondamentale è che purtroppo non è facile avere una visione 3D di ciò che succede guardando come variano le componenti del vettore che intendo ruotare e non posseggo strumenti in grado di fornirmi una rappresentazione tridimensionale. Dovrei fare ricorso al modulo 3D di autocad ma non sono sicuro di riuscire a tirarci fuori qualcosa.
    Ho però pensato che se la cosa vale in 3D varrà anche in 2D considerando un piano coordinato (per esempio il piano xy). Intanto vediamo che succede nel caso piano.

    Ho considerato un vettore nel piano xy di modulo pari a 2 ed inclinato di 15° rispetto all'asse delle x misurati in senso orario.

    6k6s

    Adesso intendo ruotare il vettore dato attorno all'asse z una volta di 15° in senso antiorario ed una volta di 15° in senso orario.
    Nel primo caso mi aspetto che il vettore risultante a rotazione avvenuta sia:

    wx=2*i
    wy=0
    wz=0

    nel secondo caso

    wx= 2*cos(30)* i = 1.732*i
    wy=-2*sen(30)*j = -1.00 *j
    wz=0

    Per prima cosa mi costruisco il quaternione unitario nella forma espressa nell'immagine del post precedente, e cioè:

    q=[ s; (x,y,z)]

    questo deriva dalla forma:

    q=[cosϑ/2 ; n*senϑ/2]

    ma avendo assunto come asse di rotazione l'asse z avremo:

    n=[0; 0 ; 1]
    essendo anche
    senϑ/2 = 0.1305
    cosϑ/2 = 0.9914

    il quaternione unitario che opera la rotazione di +15° diviene:

    q=[0.9914 ; 0 ; 0 ; 0.1305]

    quindi abbiamo:
    s=0.9914
    x=0
    y=0
    z=0.1305

    Con questi dati possiamo costruirci l'operatore M

    ugk3

    Scriviamo adesso il vettore v che intendiamo ruotare:

    secondo quanto scritto precedentemente, esso dovrebbe essere espresso sotto forma di quaternione con parte reale nulla, quindi

    qv=[ 0; 1.932; -0.518; 0]

    e quindi trovare il quaternioneqw (espresso sempre sotto forma di quaternione con parte reale nulla) applicando a qv l'operatore M, cioè

    qw = M*qv

    Ma cosi facendo le cose non tornano affatto. Sono quindi andato a rileggere il documento da cui ho tratto quel che ho riassunto nel topic ed ho compreso che per poter applicare l'operatore M scritto in quella forma i quaternioni dei vettori v e w vengono scritti nella forma alternativa:

    qv =[v; 0]
    qw =[w; 0]

    eqo1

    Rimane pertanto da eseguire il prodotto tra unamatrice 4x4 ed un vettore 4x1.
    ulj6
    Il risultato ottenuto è quanto mi aspettavo.

    Nella immagine che segue sono invece riassunti i passi per la rotazione di -15°
    m4v2
    Anche in questo caso il risultato è quello atteso.

    Guardando meglio la matrice M, ho visto che è possibile ridurla ad una matrice 3x3 togliendo l'ultima riga e l'ultima colonna ed applicarla direttamente al vettore v senza doverlo esprimere sotto forma di quaternione ottenendo il vettore w nella forma vettoriale.
     
    Top
    .
9 replies since 18/8/2013, 09:57   471 views
  Share  
.