Abbildungsmatrix einer Projektion aus dem dreidimensionalen Raum auf eine Bildebene P  

Parallelprojektion z0=0 -> u3z0=0

>    restart;with(linalg):with(plots):

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the name changecoords has been redefined

>    Z:=vector([z0,z1,z2,z3]);

Z := vector([z0, z1, z2, z3])

>    Eb:=vector([u0,u1,u2,u3]);

Eb := vector([u0, u1, u2, u3])

>    X:=vector([x0,x1,x2,x3]);

X := vector([x0, x1, x2, x3])

>    P:=matrix(4,4,[u1*z1+u2*z2+u3*z3,-u1*z0,-u2*z0,-u3*z0,-u0*z1,u0*z0+u2*z2+u3*z3,-u2*z1,-u3*z1,-u0*z2,-u1*z2,u1*z1+u0*z0+u3*z3,-u3*z2,-u0*z3,-u1*z3,-u2*z3,u1*z1+u2*z2+u0*z0]);

P := matrix([[u1*z1+u2*z2+u3*z3, -u1*z0, -u2*z0, -u3*z0], [-u0*z1, u0*z0+u2*z2+u3*z3, -u2*z1, -u3*z1], [-u0*z2, -u1*z2, u1*z1+u0*z0+u3*z3, -u3*z2], [-u0*z3, -u1*z3, -u2*z3, u1*z1+u2*z2+u0*z0]])

>    rank(P);

3

Berechnung der beiden Transformationsmatrizen, die die Bildtrafo bringen (auf das Koordinatensystem der Zeichenebene bzw. des Computerbildschirmes.

>    t[3]:=vector([u1,u2,u3]);

t[3] := vector([u1, u2, u3])

>    nt3:=sqrt(u1^2+u2^2+u3^2);

nt3 := (u1^2+u2^2+u3^2)^(1/2)

>    tn[3]:=evalm(t[3]*1/nt3);

tn[3] := vector([1/(u1^2+u2^2+u3^2)^(1/2)*u1, 1/(u1^2+u2^2+u3^2)^(1/2)*u2, 1/(u1^2+u2^2+u3^2)^(1/2)*u3])

>    vw:=col(P,4);

vw := vector([-u3*z0, -u3*z1, -u3*z2, u1*z1+u2*z2+u0*z0])

>    v:=vector([vw[2],vw[3],vw[4]]);

v := vector([-u3*z1, -u3*z2, u1*z1+u2*z2+u0*z0])

>    uTz:=evalm(transpose(Eb)&*Z);

uTz := u0*z0+u1*z1+u2*z2+u3*z3

>    t:=scalarmul(-vector([Z[2],Z[3],Z[4]]),u0/(u1*z1+u2*z2+u3*z3));

t := vector([-u0/(u1*z1+u2*z2+u3*z3)*z1, -u0/(u1*z1+u2*z2+u3*z3)*z2, -u0/(u1*z1+u2*z2+u3*z3)*z3])

>    tn[2]:=map(simplify,evalm(v*1/(sqrt(v[1]^2+v[2]^2+v[3]^2)))):

>    tn[1]:=map(simplify,crossprod(tn[2],tn[3])):

>    TI:=matrix(4,4,[1,0,0,0,evalm(-transpose(tn[1])&*t),tn[1][1],tn[1][2],tn[1][3],evalm(-transpose(tn[2])&*t),tn[2][1],tn[2][2],tn[2][3],evalm(-transpose(tn[3])&*t),tn[3][1],tn[3][2],tn[3][3]]):

>    map(simplify,TI):

>    M:=map(simplify,evalm(TI&*P)):

Beispiel

>    u0:=-5;u1:=3;u2:=-2;u3:=0;z0:=0;z1:=3;z2:=-2;z3:=-1;

u0 := -5

u1 := 3

u2 := -2

u3 := 0

z0 := 0

z1 := 3

z2 := -2

z3 := -1

>    MB:=map(simplify,op(M)):M:=map(simplify,evalm(TI&*P)):

Wir berechnen und plotten das Bild des Einheitswürfels (A,B,D,C,E,F,G,H)

>    A:=vector([1,1,1,0]);B:=vector([1,-1,1,0]);C:=vector([1,-1,-1,0]);Dd:=vector([1,1,-1,0]);E:=vector([1,1,1,2]);F:=vector([1,-1,1,2]);G:=vector([1,-1,-1,2]);H:=vector([1,1,-1,2]);

A := vector([1, 1, 1, 0])

B := vector([1, -1, 1, 0])

C := vector([1, -1, -1, 0])

Dd := vector([1, 1, -1, 0])

E := vector([1, 1, 1, 2])

F := vector([1, -1, 1, 2])

G := vector([1, -1, -1, 2])

H := vector([1, 1, -1, 2])

>    Ap:=evalm(MB&*A):Bp:=evalm(MB&*B);Cp:=evalm(MB&*C);Dp:=evalm(MB&*Dd);Ep:=evalm(MB&*E);Fp:=evalm(MB&*F);Gp:=evalm(MB&*G);Hp:=evalm(MB&*H);

Bp := vector([13, 13^(1/2), -5, 0])

Cp := vector([13, -5*13^(1/2), -1, 0])

Dp := vector([13, -13^(1/2), 5, 0])

Ep := vector([13, 5*13^(1/2), 27, 0])

Fp := vector([13, 13^(1/2), 21, 0])

Gp := vector([13, -5*13^(1/2), 25, 0])

Hp := vector([13, -13^(1/2), 31, 0])

>    Wuerfel:=plot([[Ap[2]/Ap[1],Ap[3]/Ap[1]],[Bp[2]/Bp[1],Bp[3]/Bp[1]],[Cp[2]/Cp[1],Cp[3]/Cp[1]],[Dp[2]/Dp[1],Dp[3]/Dp[1]],[Ap[2]/Ap[1],Ap[3]/Ap[1]],[Ep[2]/Ep[1],Ep[3]/Ep[1]],[Fp[2]/Fp[1],Fp[3]/Fp[1]],[Gp[2]/Gp[1],Gp[3]/Gp[1]],[Hp[2]/Hp[1],Hp[3]/Hp[1]],[Ep[2]/Ep[1],Ep[3]/Ep[1]]],style=line,color=black,thickness=2):

>    Wuerfel1:=plot([[Bp[2]/Bp[1],Bp[3]/Bp[1]],[Fp[2]/Fp[1],Fp[3]/Fp[1]]],style=line,color=black,thickness=2):

>    Wuerfel2:=plot([[Cp[2]/Cp[1],Cp[3]/Cp[1]],[Gp[2]/Gp[1],Gp[3]/Gp[1]]],style=line,color=black,thickness=2):

>    Wuerfel3:=plot([[Dp[2]/Dp[1],Dp[3]/Dp[1]],[Hp[2]/Hp[1],Hp[3]/Hp[1]]],style=line,color=black,thickness=2):

>    display(Wuerfel,Wuerfel1,Wuerfel2,Wuerfel3);

[Maple Plot]

>   

>