G. Schgör
(Ott. 2005)
Viene affrontato il
problema di rappresentazione grafica di una figura tridimensionale su un piano
di proiezione (schermo video), considerando sia il metodo assonometrico, sia
quello più complesso della prospettiva.
Si vogliono cioè determinare algoritmi che consentano ad un programmatore
di grafica con computer di passare da uno spazio tridimensionale alla sua
proiezione piana con regole sufficientemente semplici, tali comunque da non
richiedere speciali strumenti di calcolo che non siano già previsti nei normali
linguaggi di programmazione.
Vengono perciò indicate procedure semplificate,
adatte alla rappresentazione grafica di figure elementari, quali quelle
utilizzate per illustrazioni
didattiche, dandone anche esempi applicativi.
Un punto nello spazio tridimensionale è definito da una terna di coordinate riferite
ad una terna di assi (x,y,z) fra loro perpendicolari (rappresentazione
“cartesiana”).
Una volta definito il centro (o “origine”) degli
assi e la direzione di questi, un generico punto p è
infatti individuato dalla sua distanza
nella direzione di ciascun asse. Le coordinate del punto xp.yp,zp sono quindi le rispettive distanze,
espresse in una appropriata unità di misura.
Questo
è semplice da capire, ma quando lo si voglia illustrare su un piano (un foglio
di carta o lo schermo video) sorge una complicazione: la mancanza della terza
dimensione!
Si
può ovviare a questo, rappresentando il terzo asse (quello che uscirebbe
perpendicolarmente dal
piano
di disegno) con una retta giacente nel piano, ma obliqua rispetto alle altre
due.
La figura illustra
chiaramente questo principio, mostrando l’asse y inclinato di un angolo j
rispetto alla verticale. E’ questa una delle forme più comuni di assonometria, in cui
la terna di coordinate del punto
(xp,yp,zp) viene ridotta alle due
coordinate di proiezione sul piano zx, rispettivamente xpp e zpp.
Queste due sono ricavate facilmente dalle
relazioni: xpp = xp - yp*sen(j)
e zpp = zp - yp*cos(j).
E’ quindi ovvio che definendo una qualsiasi figura
mediante le coordinate dei suoi singoli punti, è possibile convertirla in
rappresentazione piana semplicemente applicando queste relazioni (e per un
calcolatore è un’operazione banale).
La figura mostra la
rappresentazione di un cubo (8 vertici, quindi altrettanti punti da
calcolare e poi da congiungere con segmenti di retta).
Si noti che per dare maggior realismo alla figura, si è introdotto una unità di misura diversa per l’asse y
(i 2/3 dell’unità di x e z). Anche con questo accorgimento si nota una forma
che non soddisfa pienamente le regole della normale visione tridimensionale:
il mantenimento del parallelismo degli
spigoli contrasta infatti con l’impressione di convergenza con la profondità
che si ha nella realtà (vedremo il superamento di questo con la prospettiva).
Particolarmente interessante è la rappresentazione
assonometrica di curve spaziali (qualora se ne sappia esprimere matematicamente
l’equazione). Più problematica è la rappresentazione di superfici, per cui per
poterne interpretare l’andamento, occorre prevedere un disegno a strati (curve
di livello) o a reticolo.
Un’osservazione importante per il disegno mediante
calcolatore di curve o superfici spaziali è che spesso è opportuno ricorrere ad
una rappresentazione in coordinate “polari”, anziché cartesiane. Questo
consente di spaziare più uniformemente i punti calcolati, quindi di ottenere un
migliore aspetto.
La figura illustra
la convenzione solitamente adottata per
esprimere la “posizione” del generico punto p in coordinate polari.
Si deve sottolineare che la conversione tra i due
tipi di coordinate è elementare (ovviamente per un calcolatore) e si basa sulle
seguenti relazioni:
da cartesiane a polari:
r = Ö(xp^2+yp^2+zp^2)
b = arcsen(zp/r)
a = arcsen(yp /(r*cosb)
da polari a cartesiane:
xp =
r*cosa*cosb
yp =
r*cosa*senb
zp = r*senb
Ecco ad esempio come può essere disegnato uno
spicchio di sfera (1/8) con centro coincidente con l’origine degli assi.
L’equazione è
x^2+y^2+z^2=R^2 , che può essere prima convertita in coordinate polari,
utilizzando poi queste per calcolare i singoli punti da disegnare.
Ovviamente r=R e, tenendo costante b, si può far variare a con incrementi costanti da
0 a 90° (se tali incrementi sono sufficientemente piccoli si otterrà una linea
continua anziché i singoli punti).. Incrementando poi b, si potrà disegnare un
secondo “strato”, e così via.
Il metodo illustrato è particolarmente adatto a
rappresentare soluzioni di problemi di geometria tridimensionale.
La figura che segue mostra la presentazione grafica
di un programma che calcola il punto di intersezione di un piano con una retta.
L’equazione canonica di un piano P(A,B,C) è data
da A*x+B*y+C*z=1 (si osservi che A,B,C
sono gli inversi delle intercette con i rispettivi assi) mentre la retta
r(a,b,c,d) è definita dalle sue proiezioni sui piani xy (y=a*x+b) e
zx (z=c*x+d).
Il programma (in Visual Basic) calcola il punto di intersezione pi(x,y,z) e ne dà
la rappresentazione grafica, partendo da dati prefissati (variabili nel
programma) e dai due parametri a e c variabili mediante cursori ( per
semplicità si sono posti =0 i parametri b e d, cioè facendo passare la retta
per l’origine degli assi): ogni volta che si cambia a o c , viene ridisegnata la figura con il nuovo punto
d’intersezione.
Questo rende molto più intuitiva la soluzione, con
l’immagine immediata (il che non è poi così facile da immaginare in uno spazio
tridimensionale).
Come ultimo esempio di rappresentazione
assonometrica, cito la soluzione
grafica di uno dei problemi posti nella “Gara di Matematica” del sito
matematicament.it.
Il problema chiedeva di determinare la direzione di lancio di una bilia in un ideale
“biliardo tridimensionale” (a parallelepipedo ed in assenza di gravità) in modo
tale che, lanciata da un punto
qualsiasi di una faccia, la bilia tornasse allo stesso punto di partenza dopo
aver rimbalzato su tutte le altre
facce.
Le traiettorie relative alla soluzione sono
ottenibili richiamando il programma:
http://www.matematicamente.it/giochi/biliardo3d_sol5.exe
ed attivando il tasto di simulazione.
Il programma (in edizione eseguibile di Visual
Basic) richiede per l’esecuzione l’interprete VBRUN300.dll (qualora non già
disponibile, scaricabile da: http://matfisinf.supereva.it/VBRUN300.DLL
)
Agendo sui cursori, è possibile variare a piacere il
punto di partenza e verificare il ritorno della bilia in questo punto.
Dal punto di vista grafico, si noti l’opportunità di
indicare anche la proiezione delle traiettorie sulla faccia orizzontale
inferiore, per meglio mettere in risalto la tridimensionalità di queste.
Prospettiva
Si è già accennato al
fatto che la rappresentazione assonometrica non riproduce gli effetti della
visione tridimensionale, che rimpicciolisce gli oggetti più distanti
dall’osservatore.
Il problema, che ha interessato la pittura per
centinaia di anni, è stato ormai risolto con le regole della prospettiva.
Normalmente questo viene ottenuto con procedure
grafiche che, dato il disegno in scala degli oggetti nelle direzioni frontale,
laterale e dall’alto (cioè “in pianta”), permette di ottenere una visione
“panoramica” tridimensionale.
Poiché lo scopo è qui di dare al programmatore di
grafica computerizzata uno strumento matematico che gli permetta di fare la
stessa cosa, dobbiamo trasformare le coordinate di un generico punto p,
individuato rispettivamente da xp,yp,zp,
in una coppia di coordinate (xpp,zpp) sul piano do proiezione.
Per semplificare questa trasformazione, assumiamo
come piano di proiezione lo stesso piano zx e supponiamo che la
posizione dell’osservatore sia nel piano yz (con altezza HO e
distanza DO dal centro degli assi).
Date quindi le coordinate del punto nello spazio
x,y,z, è elementare ricavare geometricamente le espressioni delle coordinate x
e z della sua proiezione sul piano zx
(è l’intersezione della retta passante per p e per l’osservatore, con il
piano zx, cioè y=0).
Risulta: xpp =xp/(1+yp/DO) e
zpp=(zp*DO + yp*HO) /(yp+DO)
E’ interessante notare che il piano orizzontale
passante per l’osservatore (z=HO) interseca il piano di proiezione xz
formando quella che viene chiamata “linea di orizzonte”. Su questa giacciono i punti
di fuga, cioè quei punti a cui convergono le rette corrispondenti alle
parallele nel disegno tridimensionale.
Vediamone un’applicazione rappresentando uno spigolo
di parallelepipedo con due sole facce visibili.
Date la vista laterale
e la pianta (che individuano così l’oggetto da proiettare) si possono ricavare
le coordinate sui tre assi (x,y,z) dei sei punti (p1…p6) da trasformare in
rispettive coordinate xpp,zpp sul piano
di proiezione (zx).
Il risultato è la
rappresentazione in prospettiva:
Come si vede, le
parallele p1- p3 e p2-p4 dell’oggetto originale, convergono ora verso un punto
dell’orizzonte (che può essere determinato dall’intersezione dalla retta
orizzontale dall’osservatore e parallela al lato di sinistra, con il piano
di proiezione). Lo stesso si può dire per il lato di destra. Questi punti di
convergenza sono detti punti di fuga e corrispondono alla posizione che
si avrebbe se ciascun lato si prolungasse all’infinito.
Si fa notare che il
metodo è applicabile anche a forme
curve (solitamente di laboriosa e difficile procedura se la proiezione è eseguita geometricamente). Ovviamente
vanno calcolati molti più punti, ma se
la curva è esprimibile in forma matematica, questo non è un problema.
Come esempio di questo, ecco la prospettiva di un arco
(semicerchio), disegnato sul lato destro dello stesso parallelepipedo visto
prima..
Si fa notare che la rappresentazione di archi
su piani verticali, inclinati sul piano di proiezione (zx) di un angolo g, è semplicemente espressa da
xp = xc – R*cos(g)*cos(d)
yp = yc – R*sen(g)*cos(d)
zp = zc – R* sen(d )
dove (xc,yc,zc) sono le
coordinate del centro dell’arco, R il suo raggio e d l’angolo al centro, che va incrementato da 0 a p/2 per tracciare il semicerchio.
Ovviamente, ciascun
punto così calcolato va “proiettato” sul piano zx con le formule di
trasformazione date, per ricavarne le coordinate xpp e zpp del corrispondente
punto da tracciare.
La figura mostra il risultato di 4 archi uguali e consecutivi
su un piano verticale, tracciato con le formule precedenti, semplicemente
cambiando per ciascuno la posizione del rispettivo centro.
Conclusioni
Si è mostrato un
semplice approccio matematico per la trasformazione di figure nello spazio
tridimensionale in figure piane, sia per
la rappresentazione assonometrica, sia per quella in prospettiva.
La prima è più adatta
alla rappresentazione di solidi o curve matematiche per la visualizzazione di
soluzioni di problemi geometrici, la seconda per la rappresentazione di
costruzioni architettoniche.
Per quest’ultima, si
sottolinea l’estrema facilità di individuare il punto di osservazione più
adatto, variando opportunamente i parametri relativi alla posizione dell’osservatore stesso.
Una volta impostato il
programma, il cambiamento di questi parametri porta infatti immediatamente alla
visualizzazione del risultato, consentendo la scelta che maggiormente soddisfa.
Questo è incomparabilmente
più comodo rispetto ai classici metodi puramente geometrici, che costringono a
ripartire da zero ogni volta che si volesse portare qualche cambiamento.