In questa lezione introduciamo a grandi linee alcuni concetti di base della geometria dello spazio. Nella maggior parte dei casi è possibile trovare una soluzione ai problemi legati al 3D di Papervision tramite le sue funzioni interne, tuttavia nel caso di progetti complessi può capitare di dover usare alcune nozioni di matematica.
Le rette possono essere scritte in forma esplicita come intersezioni di due piani o in forma implicita attraverso le equazioni parametrice
var x = vettore.x + l*t; var y = vettore.y + m*t; var z = vettore.z + n*t;
Il vettore (l,m,n) prende comunemente il nome di vettore direttore, mentre i singoli valori l, m, n si chiamano parametri direttori. Questi possono essere facilmente calcolabili infatti dati due vertici V1:vertex3D e V2:vertex3D avremo che
var l = V1.x - V2.x; var m = V1.y - V2.y; var n = V1.z - V2.z;
Poniamo di avere due cubi e di voler disegnare una serie di linee tratteggiate che passano al centro dei nostri solidi. Utilizzando le formule appena viste potremo scrivere
while (t<1) { t += 0.1; cx = cubo1.x + t*(cubo2.x - cubo1.x); cy = cubo1.y + t*(cubo2.y - cubo1.y); cz = cubo1.z + t*(cubo2.z - cubo1.z); var SolidoLineX = addLine( new Vertex3D(oldCx,oldCy,oldCz), new Vertex3D(cx, cy,cz), new LineMaterial(0x00FF00,2)); scena.addChild(SolidoLineX); t += 0.1; oldCx = cubo1.x + t*(cubo2.x - cubo1.x); oldCy = cubo1.y + t*(cubo2.y - cubo1.y); oldCz = cubo1.z + t*(cubo2.z - cubo1.z); } function addLine( _v0:Vertex3D,_v1:Vertex3D, _lineMaterial:LineMaterial, _nome:String = "linea"):Lines3D { var line:Lines3D = new Lines3D(_lineMaterial,_nome+"_"+_lineCont); _lineCont++; line.addNewLine(1,_v0.x,_v0.y,_v0.z,_v1.x,_v1.y,_v1.z); return line; }
Al crescere di t
i punti di inizio e fine dei segmenti avanzeranno dal cubo1
verso il cubo2
.
I piani come le rette possono essere scritti in forma esplicita o implicita
// forma esplicita: Ax + By +Cz + D = 0; // forma implicita: x = x1 + A1*u + B1*t y = y2 + A2*u + B2*t z = z3 + A3*u + B3*t
Due piani infine sono paralleli se A
, B
e C
risultano proporzionali mentre si dicono perpendicolari se:
A*A1 + B*B1 + C*C1 = 0