HOME OGGETTI 3D LIBRI CORSI TUTORIAL FORUM SHOP CONTATTI   LOGIN









Autore Topic: Operazioni con vettori  (Letto 1953 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

marcomasetti

  • Newbie
    ...sono qui da poco, il mio miglior amico è il pulsante RICERCA
  • *
  • Post: 183
Operazioni con vettori
« il: 26 Agosto 2012, 16:11 »
I programmi di disegno assistito dal calcolatore o CAD si basano sull’algebra vettoriale, un metodo geometrico normalmente utilizzato in fisica. Un vettore è un segmento orientato, rappresentato graficamente da una freccia, definita da due punti A,B:
il primo punto A definisce il punto di applicazione del vettore, il secondo punto B corrisponde alla punta della freccia.
La distanza AB è detta modulo del vettore.
Se il punto di applicazione coincide con l’origine O, si stabilisce una corrispondenza biunivoca tra i punti dello spazio e i vettori uscenti da O, per cui si possono considerare i punti come vettori con punto di applicazione nell’origine:
P ≡ (x,y,z)   equivale al vettore OP
Il modulo di un vettore è dato dalla sua lunghezza, nel caso del vettore OP vale sqr(x^2+y^2+z^2).
Per un vettore AB con A≡ (xa,ya,za),   B≡ (xb,yb,zb),   il modulo risulta:
sqr((xb-xa)^2+( yb-ya)^2+( zb-za)^2).
Due vettori possono essere sommati, o sottratti, con la regola del parallelogramma. Prima si traslano i vettori in modo da avere un unico punto di applicazione, poi si considera il parallelogramma da essi individuato. La somma vettoriale è rappresentata dalla diagonale del parallelogramma. Dato che l’inverso del vettore è lo stesso vettore con senso contrario, per avere la differenza si somma il vettore dato con l’opposto dell’altro.   Dal punto di vista algebrico queste operazioni corrispondono alla somma o alla sottrazione delle relative coordinate che individuano il punto o il vettore.  Moltiplicare un vettore per un numero significa poi allungarlo in proporzione a quel valore, operazione che si traduce nel moltiplicare per quel fattore le singole coordinate.

Più complesso è il prodotto tra due vettori, esistono infatti due tipi di prodotto:
il prodotto scalare, che dà luogo a un numero,
il prodotto vettoriale, che fornisce un nuovo vettore.

Il prodotto scalare si ottiene dalla proiezione ortogonale di un vettore sull’altro. La misura ottenuta va poi moltiplicata per il modulo di quest’ultimo. Il prodotto scalare si ricava dunque dal prodotto dei moduli per il coseno dell’angolo formato dai due vettori.

Se i due vettori hanno il centro di applicazione nell’origine:
OA≡ (xa,ya,za),   OB≡ (xb,yb,zb),
il prodotto scalare vale OA*OB=xa*xb+ ya*yb+ za*zb
Per cui detto al l’angolo formato dai due vettori risulta:
cos(al)= (xa*xb+ ya*yb+ za*zb)/( sqr(xa^2+ya^2+za^2)* sqr(xb^2+yb^2+zb^2) )
ovvero:
al=acs((xa*xb+ ya*yb+ za*zb)/( sqr(xa^2+ya^2+za^2)*sqr(xb^2+yb^2+zb^2))
è la formula che ci restituisce l’angolo tra i due vettori  OA≡ (xa,ya,za),   OB≡ (xb,yb,zb).
Se i vettori fossero ortogonali, tale angolo è nullo e deve risultare:
xa*xb+ ya*yb+ za*zb=0.
Se i due vettori si trovano sul piano xy, si esprimono come:
OA≡ (xa,ya,0),   OB≡ (xb,yb,0),
pertanto risultano ortogonali tra loro se:
xa*xb=- ya*yb   ovvero:   xa/ya=-yb/xb

Il prodotto vettoriale fornisce un vettore ortogonale al piano definito dai due vettori dati:
il suo verso segue la regola della mano destra, il pollice rappresenta il primo vettore, l’indice il secondo, il medio il vettore prodotto.
Il modulo è definito dall’area del parallelogramma individuato dai due vettori e vale il prodotto dei moduli per il seno dell’angolo da essi compreso.
Le coordinate del prodotto vettoriale OA^OB=OC sono:
xc=ya*zb-za*yb
yc=za*xb-xa*zb
zc=xa*yb-ya*xb
Come molte formule di geometria, queste formule sono circolari,  nel senso che ciascuna si ricava dalle precedenti considerando x,y,z come segnate su un cerchio, in modo che y segue x, z segue y, x segue z e così via. 
Se OA e OB si trovano su xy risulta zc=sin(al)* ( sqr(xa^2+ya^2)*sqr(xb^2+yb^2))
sin (al)= (xa*yb-ya*xb)/ ( sqr(xa^2+ya^2)*sqr(xb^2+yb^2))
Se poi OA e OB sono ortogonali dovrà risultare:
xa*yb-ya*xb= sqr(xa^2+ya^2)*sqr(xb^2+yb^2)

Come esercizio costruiamo un cerchio (poligono regolare) perpendicolare a un dato vettore (x,y,z).
Sia ON≡ (nx,ny,nz) il versore (vettore di modulo uno) del vettore dato.
La sua proiezione sul piano xz è data da: (nx,0,nz).
Dalla geometria descrittiva sappiamo che se un piano è perpendicolare a una retta, la proiezione ortogonale della retta risulta perpendicolare alla traccia del piano.
Il piano uscente dall’origine e ortogonale al vettore ON taglia pertanto il piano xz lungo la retta di equazione:
y=tan(an)*x
dove an=-atn(nx/nz), con nz diverso da 0,  è  l’angolo, cambiato di segno, che  (nx,0,nz)  forma con l’asse z, infatti:    nx=nz*tan(-an).
Il versore della retta di traccia ha dunque coordinate vi≡ ( cos(an), 0, sin(an) )
Per ottenere un terzo versore vj ortogonale a ON≡ (nx,ny,nz) e a vi applichiamo il prodotto vettoriale:
vj≡ ( ny*sin(an), nz*cos(an)-nx*sin(an), -ny*cos(an) )
A questo punto è possibile costruire il cerchio basandosi sui versori ortogonali vi, vj che definiscono il piano normale a (x,y,z).
Rispetto il sistema vi,vj il cerchio ha coordinate  ( r*cos(be), r*sin(be) ), con be parametro compreso tra 0 e 360.  Ogni punto OC del cerchio si ottiene sommando i vettori:
r*cos(be)*vi= r*cos(be)* ( cos(an), 0, sin(an) )= (r*cos(be)* cos(an), 0, r*cos(be)* sin(an) )
r*sin(be)*vj= r*sin(be)* (ny*sin(an), nz*cos(an)-nx*sin(an), -ny*cos(an))
Infatti ogni punto P sul piano definito da vi,vj si ottiene come combinazione lineare dei due versori:
OP=x’*vi + y’*vj =( x’*cos(an)+y’*ny*sin(an), y’*( nz*cos(an)-nx*sin(an) ) , x’*sin(an) –y’*ny*cos(an)  )
dove x’,y’ sono le coordinate relative agli assi definiti da tali versori.

Lo script per ottenere un cerchio perpendicolare al vettore (x,y,z) è il seguente:

x=  !coordinate vettore
y=
z=
n=  !numero lati poligono
r= !raggio poligono

if z=0 then end
nx=x/ sqr(x^2+y^2+z^2)
ny= y/ sqr(x^2+y^2+z^2)
nz= z/ sqr(x^2+y^2+z^2)
an=-atn(nx/nz) 
BASE
for i=0 to n-1
be=360/n*i
VERT  r*cos(be)* cos(an)+ r*sin(be)* ny*sin(an),
           r*sin(be)* (nz*cos(an)-nx*sin(an)),
          r*cos(be)* sin(an) -r*sin(be)* ny*cos(an)
next i
for i=1 to n-1
EDGE  i, i+1, -1, -1, 0
next i
EDGE  n,  1, -1,-1,0
for i=1 to n
put i
next i
Pgon n, 0, -1, get (nsp)


I concetti qui esposti possono essere applicati alla deformazione di una sfera o di un cilindro primitivi secondo una curva (SWEEP), in modo che i paralleli originari si dispongano in senso ortogonale all’asse deformato. Considererò il caso in un post successivo.
« Ultima modifica: 26 Agosto 2012, 16:19 da marcomasetti »