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]):
> 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]);
>
t1:=trasforma(t0,MP([0,0,1,0],[1,5,3,1]));
proiezione del tetraedro t0 sul piano
dal punto (
)
> disegno3d(tetraedro(t0) union tetraedro(t1));
>
t2:=trasforma(t0,MP([0,2,3,4],[1,-2,3,0]));
proiezione parallela di t0 sul piano
nella direzione del vettore (
)
> disegno3d(tetraedro(t0) union tetraedro(t2));
>