Esempi

> with(linalg):with(plottools):

> colore:=[red,green,blue,white]:

> tetraedro:= proc(l) local i,ll; global faccia; ll:=convert(l,listlist):for i from 1 to 4 do faccia[i]:=polygon(subsop(i=NULL,ll),color=colore[i]) od; RETURN(convert(faccia,set)) end:

> t0:=[[0,0,0],[1,0,0],[0,1,0],[0,0,1]];

> disegno3d:=f->plots[display](f,scaling=CONSTRAINED,axes=NORMAL,labels=[x,y,z]):

t0 := [[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]]

> omogeneo:=f->augment(f,vector(rowdim(f),1)):

> nonomogeneo:=f->matrix([seq([seq(f[i,j]/f[i,coldim(f)],j=1..coldim(f)-1)],i=1..rowdim(f))]):

> trasforma:=(f,m)->nonomogeneo(evalm(omogeneo(f)&*m)): la funzione che esegue la trasformazione è modificata per poter rappresentare una qualsiasi trasformazione proiettiva

> MP:=(N,C)->evalm(transpose([N])&*[C]- dotprod(N,C)* Matrix(4,4,shape=identity)): matrice di proiezione dal centro C sul piano N

> MP([0,0,1,0],[1,5,3,1]);

matrix([[-3, 0, 0, 0], [0, -3, 0, 0], [1, 5, 0, 1],...

> t1:=trasforma(t0,MP([0,0,1,0],[1,5,3,1])); proiezione del tetraedro t0 sul piano z = 0 dal punto ( 1, 5, 3 )

> disegno3d(tetraedro(t0) union tetraedro(t1));

t1 := matrix([[0, 0, 0], [1, 0, 0], [0, 1, 0], [-1/...

[Maple Plot]

> t2:=trasforma(t0,MP([0,2,3,4],[1,-2,3,0])); proiezione parallela di t0 sul piano 2*y+3*z+4 = 0 nella direzione del vettore ( 1, -2, 3 )

> disegno3d(tetraedro(t0) union tetraedro(t2));

t2 := matrix([[-4/5, 8/5, -12/5], [1/5, 8/5, -12/5]...

[Maple Plot]

>