Un piccolo serpente ci conduce attraverso le principali caratteristiche del Windows Phone 7
Introduzione Core UI & Design Conclusione Premi Discussioni
Marcosroom.it Didatticando

Un piccolo ripasso di matematica: il sistema di coordinate polari

Prima di iniziare a parlare del selettore circolare, dobbiamo fare un piccolo ripasso di matematica.

Iniziamo da qualcosa che tutti conosciamo: il piano cartesiano. Vediamo quello che dice Wikipedia:

"Un sistema di coordinate cartesiane determina univocamente ogni punto in un piano, utilizzando una coppia di coordinate numeriche, che rappresentano le distanze (con segno) del punto da due rette orientate perpendicolari e fisse, misurate con la stessa unità. Ogni retta di riferimento è chiamata asse del sistema, e il loro punto di incontro è l'origine."

Tradotto in un linguaggio umano, ciò significa che nel nostro piano abbiamo due rette perpendicolari (chiamate assi), e ogni punto del piano è definito da una coppia di numeri che indicano, rispettivamente, la proiezione del punto sull'asse X, e sull'asse Y.

Cartesian plane example

In questo esempio, ho posizionato 4 punti sul piano: il testo affiancato rappresenta le coordinate del punto stesso. Ad esempio, il punto blu è (4, 5) perchè, orizzontalmente, dista 4 unità dall'origine, e, verticalmente, 5 unità.

Ma tu dovresti già saperle queste cose, giusto? Ovviamente, la risposta è si, quindi passiamo direttamente al nostro nuovo sistema: il sistema di coordinate polari. Come al solito, vediamo quello che dice Wikipedia:

"In matematica, il sistema di coordinate polari è un sistema di coordinate bidimensionale nel quale ogni punto del piano è definito dalla distanza da un punto fisso e da un angolo da una direzione fissa."

Potrebbe sembrare più complesso del sistema cartesiano, ma analizziamo meglio il testo: abbiamo un punto fisso e una direzione fissa dalla quale iniziare a misurare gli angoli. Ogni punto del piano, quindi, ha due diversi tipi di coordinate: un numero e un angolo.

Polar coordinate system

Esaminiamo il punto blu: il primo numero (7) è la distanza dal punto fisso (centro del sistema) e la seconda (60°) è l'angolo fra il punto e la direzione fissa (linea orizzontale). Per il punto verde, il grafico precedente è auto-esplicativo.

Quando iniziamo a parlare di curve sul piano, dobbiamo definire ogni punto come:

Generic polar point

Dove, θ è l'angolo del punto e r(θ) è una funzione che restituisce la distanza del punto dall'origine.

Comunque, perchè ti sto dicendo tutte queste cose? Perchè dovrei utilizzare il sistema polare invece di quello cartesiano? Sinceramente, non so se esiste un motodo preciso per scegliere quale sia il migliore, ma posso darti un esempio di quello che penso: il cerchio. Immagina un cerchio il cui centro coincida con l'origine degli assi: queste sono le due equazioni.

Piano cartesiano:

Equation of the circle in a Cartesian plane

Qui, abbiamo un'equazione di secondo grado, dove r è il raggio del cerchio. (Non impossibile, ma brutto, no?)

Polar system:

Equation of the circle in a polar system

Qui, l'equazione è molto semplice: per ogni valore di theta, restituiamo il raggio della circonferenza. Ciò significa che per ogni angolo, la distanza dal punto fisso è sempre il raggio del cerchio.

L'esempio del cerchio è semplice, ma prova ad immaginare qualcosa di un po' più complesso, come una spirale:

Archimedean spiral   (Immagine presa da Wikipedia)

Non so se esiste un modo per fare la stessa cosa con le coordinate cartesiane, ma so che questa è l'equazione polare della Spirale archimedea:

Polar equation of the Archimedean spiral

Semplice, no? Cambiando il parametro a giriamo la spirale, mentre b controlla la distanza fra i bracci.

Il sistema polare è bello, ma... come posso implementarlo nella mia applicazione?? Il .NET Framework comprende solo coordinate cartesiane!!
Il problema è subito risolto: dobbiamo solo scrivere una funzione di conversione delle coordinate polari a quelle cartesiane.

Polar to Cartesian

La motivazione di queste equazioni è molto semplice:

Polar to Cartesian   (Image taken from Wikipedia)

Come puoi vedere, il punto con le coordinate polari (r, θ) può essere posizionato in un piano cartesiano; utilizzando le funzioni goniometriche seno e coseno possiamo calcolare le proiezioni del punto sull'asse X e sull'asse Y.

Ma ora, è giunto il momento del codice! Ecco la funzione di conversione:

private Point PolarToCartesian(double r, double theta) { 
return new Point(r * Math.Cos(theta), r * Math.Sin(theta));
}

E ora? Niente. Possiamo finalmente iniziare a parlare del nostro CircularSelector.

 

Condividi
Indietro Tutti i webmaster che volessero segnalare, non copiare,
il contenuto di questa pagina sul proprio sito, possono farlo liberamente.
E' gradito un preavviso tramite mail all'autore e l'iserimento,
nella pagina di citazione, di un link verso la pagina corrente.
© Copyright    Marco's Room
Avanti
Download SnakeMobile

Scaricato 115 volte

Navigazione Transizioni Pulsante rotondo luminoso Trigger Un piccolo ripasso di matematica Selettore circolare Isolated storage: file e impostazioni Impostazioni Build action: Content o Resource? Audio & XNA