[Soci SLIP] [OT] prodotto vettoriale

Lucio Crusca lucio a sulweb.org
Gio 1 Nov 2007 14:59:44 CET


Sto scavando nei meandri della mia materia grigia per ricordarmi alcune nozioni a suo tempo studiate all'università per applicarle in un programma. So che qualche matematico qui in lista mi saprà confermare se mi ricordo bene o no (per ora wikipedia mi ha confermato la teoria ma non ho trovato l'applicazione pratica).

Leggete questo messaggio con carattere monospace, perché le carenze dell'ASCII e le limitazioni del'email mi forzano ad usare l'ASCII art.

Dati a e b vettori in R3, il prodotto vettoriale fra a e b è:

a x b = n |a| |b| sin(t)

dove n è il versore ottenuto con la regola della mano destra e t è l'angolo aOb.

Ma sappiamo anche che:

            | i  j  k |
            |         |
a x b = det |a1 a2 a3 |
            |         |
            |b1 b2 b3 |

E fino a qui è la teoria che anche Wikipedia mi conferma. Quello che serve a me è calcolare t dati a e b in R2. A questo fine passo al caso specifico e chiedo ai matematici di correggere eventuali errori nel mio seguente ragionamento:

Essendo i vettori in R2, abbiamo a3 = b3 = 0 e (i,j,k) diventa (0,0,1) ed il determinante diventa a1b2 - a2b1. Quindi

a x b = (0, 0, a1b2 - a2b1)

da cui

| a x b | = a1b2 - a2b1

Componendo con la prima equazione otteniamo

n |a| |b| sin(t) = a1b2 - a2b1

da cui, essendo n un versore pari a 1 o -1

sin(t) = n ((a1b2 - a2b1) / (|a| |b|)).

Ora per pitagora |a| = sqrt(a1^2 + a2^2)

quindi:
                            (a1b2 - a2b1) 
sin(t) = n * -------------------------------------
             sqrt(a1^2 + a2^2) * sqrt(b1^2 + b2^2)

infine si ha che
                            (a1b2 - a2b1) 
t = arcsin(n * ------------------------------------- )
               sqrt(a1^2 + a2^2) * sqrt(b1^2 + b2^2)

Dato che per ora non mi interessa in che direzione si apre l'angolo, il valore di n è ininfluente, ed essendo il modulo di n sempre 1 possiamo tranquillamente eliminarlo:

                         (a1b2 - a2b1) 
t = arcsin( ------------------------------------- )
            sqrt(a1^2 + a2^2) * sqrt(b1^2 + b2^2)

È tutto giusto? Esiste un modo più semplice di calcolare l'angolo fra due vettori? Se invece mi interessasse in che direzione si apre l'angolo, come calcolo n? (il pc non ha la mano destra...)
Grazie,
Lucio.

-- 
Virtual Bit di Lucio Crusca
via Isonzo, 5   10069 - Villar Perosa
http://www.sulweb.org
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://mailman.pinerolo.linux.it/pipermail/soci/attachments/20071101/4ea3340e/attachment.html


Maggiori informazioni sulla lista Soci