HOME OGGETTI 3D LIBRI CORSI TUTORIAL FORUM SHOP CONTATTI   LOGIN









Autore Topic: TRASFORMAZIONE 2D DA CARTESIANE A POLARI  (Letto 2318 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
TRASFORMAZIONE 2D DA CARTESIANE A POLARI
« il: 03 Novembre 2012, 19:12 »
Questo tipo di trasformazione, ed anche la sua inversa, è di uso corrente nei programmi di fotoritocco entro i filtri “distorsioni”.  Il linguaggio GDL ci permette di approfondire i concetti di geometria che sono alla base di questo tipo di distorsione piana.

Consideriamo nel sistema di riferimento xOy il punto P di coordinate (x,y). Vogliamo determinare la posizione  P’(x’,y’) del suo corrispondente in coordinate polari.
La trasformazione polare con polo O trasforma ogni rettangolo con un lato giacente sull’asse x in un settore circolare con centro in O, dove viene compresso detto lato. L’ampiezza del settore può essere stabilita prefissando un valore angolare che corrisponde ad una certa lunghezza spiccata sull’asse x. Supponendo di  mantenere invariato l’asse y, che diventa luogo dei punti uniti, possiamo stabilire che l’asse verticale di equazione  x=l corrisponda al raggio di angolo ga, riferito all’asse y secondo il verso orario.

Detto an l’angolo spiccato dal raggio OP’, sempre riferito all’asse y secondo il verso orario, risulterà:

an/ga=x/l   da cui  an=ga/l*x

Pertanto la trasformazione è definita dal sistema:

x’=y*sin(ga/l*x)
y’= y*cos(ga/l*x)

Infatti il valore y diventa il raggio vettore, mentre il valore x determina l’angolo o anomalia an.
Rispetto alla formula canonica qui si sono scambiati x’ con y’.
Un punto oggetto che si sposta verso destra, cioè nel senso di x+, con ordinatay>0, viene trasformato in un punto immagine polare che ruota in senso orario lungo la circonferenza di raggio y.

Consideriamo la “circonferenza” (poligono di n lati) di centro  (xc,yc) e raggio r descritta nel linguaggio GDL come:

for i=0 to n-1
x=xc+r*cos(360/n*i)
y=yc+r*sin(360/n*i)
put x,y
next i
poly2 nsp/2, 1+4, get (nsp)      !1=mostra segmenti, 4=chiudi curva

Questa forma verrà distorta tramite la trasformazione polare in una nuova curva, che può avere forma di fagiolo, di otto (lemniscata), di goccia, oppure può presentare oppure non presentare un asse di simmetria, a seconda dei valori attribuiti ai parametri della traformazione ga o l, oppure ai  parametri della curva: raggio e centro

for i=0 to n-1
x=xc+r*cos(360/n*i)
y=yc+r*sin(360/n*i)
xx=y*sin(ga/l*x)
yy= y*cos(ga/l*x)
put xx,yy
next i
poly2 nsp/2, 1+4, get (nsp)

Consideriamo ora la retta di equazione: y=p*x+q, che taglia in y=q l’asse verticale ed ha pendenza p.
Nel linguaggio GDL si può scrivere un suo segmento definito in [ x0, x0+d ] come:

line2   x0, p*x0+q,   x0+d, p*( x0+d )+q

Dato però che lo vogliamo trasformare in curva lo frammentiamo in n segmenti:

for i=0 to n
x=x0+d/n*i
y= p*x+q
put x ,y
next i
poly2 nsp/2, 1 , get (nsp)

Il segmento di retta verrà trasformato in curva, a meno che non risulti q=0, infatti in tal caso diventa un raggio che si allunga o si accorcia (si riduce a un punto se coincide con l’asse x).
In particolare se la pendenza p è nulla (retta orizzontale), si ricava un arco con centro in O; nel caso generico invece si trasforma in spirale archimedea, con spire sempre più compresse e numerose all’aumentare dell'ampiezza angolare del settore di riferimento ga.
La spirale e la retta si intersecano nel punto unito sull’asse y; per ordinate negative della retta la spirale gira all’inverso.

for i=0 to n
x=x0+d/n*i
y= p*x+q
xx=y*sin(ga/l*x)
yy= y*cos(ga/l*x)
put xx,yy
next i
poly2 nsp/2, 1 , get (nsp)