/*
 * Name:           Animation.REXX
 * Autor:          Stefan Kebekus
 * Datum:          31.1.94
 *
 * Sinn:           Demonstriert 3D-Graphik mit SIGMAth
 * Beschreibung:
 *
 * Dieses Programm zeichnet einen vom Benutzer definierten
 * Graphen einer Funktion zweier veränderlicher. Der Graph wird 
 * in 100 Schritten gedreht; die Einzelbilder werden gespeichert.
 * Die Bilder können dann zu einer Animation zusammengefasst werden
 *
 */

ADDRESS "rexx_SIGMAth"			/* Verbindung zu SIGMAth herstellen */
OPTIONS results				/* ja, wir wollen Ergebnisse */

MathError = "x"
DO WHILE MathError~=""
	SAY '0C'x
	SAY '*** Animation ***' '0A'x
	SAY 'Dieses Programm erzeugt eine Animation. Ein 3-dimensionaler'
	SAY 'Funktionsgraph wird gedreht.' '0A'x
	SAY 'Bitte Funktion eingeben:'
	SAY 'f(u,v) = '
	PULL Term

	new_surface	"u v "Term	/* SIGMAth mit der eingegebenen Funktion füttern */
	IF MathError ~= "" THEN DO	/* War die Funktion nicht korrekt ? */
		SAY '0A'x"Die Funktion war nicht korrekt: "MathError	/* gleich anmeckern */
		SAY "Bitte <Return> drücken..."
		PULL Term
	END
END

MathError = "x"
DO WHILE MathError~=""
	SAY '0A'x"Bitte Arbeitsbereich für die Variable u angeben:"
	PULL uStart
	PULL uStop
	SAY '0A'x"Bitte Arbeitsbereich für die Variable v angeben:"
	PULL vStart
	PULL vStop

	clr_Graph				/* Graphik löschen */
	Licht		"1 0 -0.5"
	SurfSteps	"25"
	VekMode		"1 2"			/* Umschalten auf Schattiert */
	SurfPlot	uStart uStop vStart vStop" 1 1 0"	/* und zeichnen ... */

	IF MathError ~= "" THEN DO	/* War die Funktion nicht korrekt ? */
		SAY '0A'x"Die Werte waren nicht korrekt: "MathError	/* gleich anmeckern */
		SAY "Bitte <Return> drücken..."
		PULL Term
	END
END

SAY '0A'x"Bitte Auflösungen (horiz. & vert.) angeben:"
PULL Horiz
PULL Vert

SAY '0A'x"Bitte Namen für die Bilddateien angeben:"
PULL GName

j = 0
DO i=0 TO 355 BY 5
	DO_Rotate	i" 0 10 3100"
	IF Length(j) < 3 THEN
		j	= "0"j	  	  
	IF Length(j) < 3 THEN
		j	= "0"j	  	  
	ILBM_Save 	Horiz Vert GName"."j
	j	= j+1
END

clr_Graph				/* Graphik löschen */

