cheap 3d affine transforms

f(x,y) { return ; }
x angle: | y angle: | z angle: |
x unit: | y unit: | z unit: |
zoom | Front height: , Back height:
range [-x,x] [,] |
range [-y,y] [,] |
R^3 Origin (Ox,Oy,Oz): (, , )
Rotate Surface (x,y,z): (, , )
Translate Surface (Tx,Ty,Tz): (, , )
R^2 Origin (Ox',Oy'): (, )

Cheap 3-D to 2-D Projection Matrix


Alle drei Winkel starten bei 0
α := x-Axis Angle
β := y-Axis Angle
γ := z-Axis Angle
u{x,y,z} := Einheit (Laenge) des Basisvektors

Es handelt sich um eine 2x3 Matrix.
Jede Spalte hält einen
Einheitsvektor [l*cos(w); l*sin(w)].

P =
ux*Math.cos(α) uy*Math.cos(β) uz*Math.cos(γ)
ux*Math.sin(α) uy*Math.sin(β) uz*Math.sin(γ)

x = Ux + Tx + points[i]
y = Uy + Ty + points[i+1]
z = Uz + Tz + points[i+2]
U = Ursprung, T = Translation


Jetzt Rotation auf den 3-D Punkten durchfuehren.

Wenn man die 3-D Koordinaten nun mit P
multipliziert,
kriegt man die Bildschirmkoordinaten

P*[x;y;z;] = [x';y']

Das gibt bis hierhin
x' = x*ux*Math.cos(α)
+ y*uy*Math.cos(β)
+ z*uz*Math.cos(γ)
y' = x*ux*Math.sin(α)
+ y*uy*Math.sin(β)
+ z*uz*Math.sin(γ)

Noch Ursprung vor die (x',y') in 2-D

Der Code dieser Version is am nachmittag
kurz hingeschmiert worden.