Predicates
interac(llist_integer,real,char,char,char)
trans(integer,real,real)
Clauses
trans(Angn,Anrc,Anrs):-Anr=Angn*3.141592/180,
Anrc=cos(Anr),
Anrs=sin(Anr),!.
interac(_,_,'\27',_,_).
interac(Coor,Ang,'+',Vista,M):-Ang<90,Angn=Ang+1,
trans(Angn,Anrc,Anrs),
clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Ang,'-',Vista,M):-Ang>0,Angn=Ang-1,
trans(Angn,Anrc,Anrs),
clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Ang,'*',Vista,M):-Ang<=80,Angn=Ang+10,
trans(Angn,Anrc,Anrs),
clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Ang,'/',Vista,M):-Ang>=10,Angn=Ang-10,
trans(Angn,Anrc,Anrs),
clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Angn,'1',_,M):-Vista='1',
trans(Angn,Anrc,Anrs),
clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Angn,'2',_,M):-Vista='2',
trans(Angn,Anrc,Anrs),
clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Angn,'3',_,M):-Vista='3',
trans(Angn,Anrc,Anrs),
clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Angn,'7',_,M):-Vista='7',
trans(Angn,Anrc,Anrs),
clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Angn,'8',_,M):-Vista='8',
trans(Angn,Anrc,Anrs),
clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Angn,'9',_,M):-Vista='9',
trans(Angn,Anrc,Anrs),
clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Ang,'x',_,M):-Vista='x',
clearviewport(),dibuja(Coor,0,0,Vista,M),readchar(X),
!,interac(Coor,Ang,X,Vista,M).
interac(Coor,Ang,'y',_,M):-Vista='y',
clearviewport(),dibuja(Coor,0,0,Vista,M),readchar(X),
!,interac(Coor,Ang,X,Vista,M).
interac(Coor,Ang,'z',_,M):-Vista='z',
clearviewport(),dibuja(Coor,0,0,Vista,M),readchar(X),
!,interac(Coor,Ang,X,Vista,M).
interac(Coor,Ang,'.',Vista,M):-Angn=Ang,Anr=Angn*3.141592/180,
Anrc=cos(Anr),
Anrs=sin(Anr),
dibujap(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Angn,',',Vista,M):-
trans(Angn,Anrc,Anrs),
dibujas(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Ang,'5',Vista,'5'):-!,interac(Coor,Ang,'4',Vista,'0').
interac(Coor,Ang,'5',Vista,'0'):-!,interac(Coor,Ang,'4',Vista,'5').
interac(Coor,Ang,';',Vista,M):-
moveto(0,0),OutText("Visualizador Tridimensional"),
moveto(0,30),OutText("Funciones:"),
moveto(0,50),OutText("1 Vista XYZ"),
moveto(0,60),OutText("2 Vista XZY"),
moveto(0,70),OutText("3 Vista YXZ"),
moveto(0,80),OutText("7 Vista YZX"),
moveto(0,90),OutText("8 Vista ZXY"),
moveto(0,100),OutText("9 Vista ZYX"),
moveto(0,110),OutText("x Vista YZ"),
moveto(0,120),OutText("y Vista XZ"),
moveto(0,130),OutText("z Vista XY"),
moveto(0,150),OutText("+ Incrementa un Grado el ngulo de vista"),
moveto(0,160),OutText("- Decrementa un Grado el ngulo de vista"),
moveto(0,170),OutText("* Incrementa 10 Grados el ngulo de vista"),
moveto(0,180),OutText("/ Decrementa 10 Grados el ngulo de vista"),
moveto(0,200),OutText("5 Prende y Apaga el Marco"),
moveto(0,220),OutText(". Une los puntos con l¡neas (£til para \"genera()\")."),
moveto(0,240),OutText(", Une los puntos con tri ngulos (£til para \"generar()\")."),
moveto(0,270),OutText("ESC Sale al Men£"),
readchar(_),
!,interac(Coor,Ang,'4',Vista,M).
interac(Coor,Angn,'4',Vista,M):-
trans(Angn,Anrc,Anrs),
clearviewport(),dibuja(Coor,Anrc,Anrs,Vista,M),readchar(X),
!,interac(Coor,Angn,X,Vista,M).
interac(Coor,Ang,_,Vista,M):-readchar(X),!,
interac(Coor,Ang,X,Vista,M).
               (
geocities.com/v.iniestra/apuntes)                   (
geocities.com/v.iniestra)