In der Kürze liegt die Würze

Mit dieser kleinen Routine können Sie sehr schnell mathematische Funktionen dreidimensional auf den Bildschirm zaubern. Das Programm läßt sich an jede Grafikerweiterung anpassen und in jedes Basic-Programm einbauen.

Das hier vorgestellte Programm dürfte wohl das kürzeste sein, das eine mathematische Funktion dreidimensional darstellt. Obwohl es so kurz ist, werden die verdeckten Linien nicht gezeichnet (Bild 1). Außerdem ist die Geschwindigkeit, mit der die Funktion berechnet wird, für ein Programm dieser Art extrem hoch. Je nach Umfang der mathematischen Funktion benötigt es nicht mehr als 5 bis 15 Minuten. Doch nun zum Programm (Listing 1), das in Simons Basic geschrieben wurde. Zeile 0 muß jeweils die mathematische Funktion enthalten. Seien Sie nicht enttäuscht, wenn der Computer nach dem Start mit RUN einen »Overflow-, Division By Zero- oder Illegal Quantity-« Error meldet. Eine Routine, die die Bereichseinhaltung überwacht, hätte einerseits Speicherplatz gekostet und andererseits die Ausführungsgeschwindigkeit auf etwa 1 bis 1,5 Stunden verlangsamt. Das Programm läßt sich übrigens an jede Grafikerweiterung anpassen. Hier eine Befehlsgegenüberstellung für das im Sonderheft 4/85 (Grafik) veröffentlichte Programm »Grafik 2000«:

Dreidimensionale Darstellung einer mathematischen Funktion als Punktraster
Bild 1. Für die Funktion »A(E)=60*SIN(E/30)+10« braucht »Simons Basic« 6 Minuten 53 Sekunden. »Grafik 2000« schafft es in 4 Minuten 22 Sekunden.
Simons BasicGrafik 2000
HIRES 1,0CLEAR:MODE 1:COLOR 1,0
PLOT X,Y,1SPOINT X,Y

Außerdem muß, wenn Sie mit Grafik 2000 arbeiten, in der Zeile 4 zwischen »NEXTI« und »END« noch der Befehl »MODE 0« eingefügt werden. Wie Sie selbst sehen, ist das Listing 1 sehr komprimiert. Damit der Aufbau der dreidimensionalen Funktion besser verstanden wird, zeigt Listing 2 die entwirrte (aber langsamere) Version. In Tabelle 1 sind einige Funktionen aufgeführt, die sich je nach Bedarf ändern lassen. Durch diese Tabelle sollen Sie ein Gefühl für die zulässigen Zahlenbereiche bekommen.

0 DEFFNA(E)=-COS(PI*E/90)*TAN(PI*E/320+1)+1
0 DEFFNA(E)=15*ABS(LOG(E/70+.5))-LOG(E*20+.5)
0 DEFFNA(E)=INT(E)+110
0 DEFFNA(E)=ABS(E-67)-20
0 DEFFNA(E)=90*EXP(-E*E/1500)
0 DEFFNA(E)=38*(SIN(E/24)+.48*SIN(3*E/24))+20
0 DEFFNA(E)=E-80
0 DEFFNA(E)=85/(E/25+1)
0 DEFFNA(E)=30*COS(PI*E/15)
0 DEFFNA(E)=40*COS(PI*E/55)
0 DEFFNA(E)=10*ABS((Z*Z)/3000)-1)
0 DEFFNA(E)=TAN(PI*E/90+1)+1
0 DEFFNA(E)=TAN(PI*E/320+1)+1
0 DEFFNA(E)=30*COS(LOG(E/30+.01))
0 DEFFNA(E)=-50*ATN(LOG(E/30+.01))
0 DEFFNA(E)=.5*E*E/(SQR(ABS(E*E-1))+.1)
0 DEFFNA(E)=30*ATN(1/(E+.1))+10*PI/2
0 DEFFNA(E)=60*SIN(E/30)+10
Tabelle 1: Eine kleine Funktionssammlung. Die Zeile 0 im Listing 1 ist jeweils durch eine dieser Zeilen zu ersetzen.
0 DEFFNA(E)=60*SIN(E/30)+10
1 HIRES1,0:A=160:B=60:FORX=0TO-100STEP-1:C=-60:D=5*INT(SQR(10000-X*X)/5)
2 FORY=DTO-DSTEP-5:E=25+FNA(SQR(X*X+Y*Y))-.6*Y
3 IFE>CTHENC=E:PLOTA+X,B+E,1:PLOTA-X,B+E,1
4 NEXTY,X:FORI=1TO10000:NEXTI:END
Listing 1. Komprimierte Version zur Darstellung dreidimensionaler Funktionen (hier mit Simons Basic).
0 DEFFNA(E)=60*SIN(E/30)+10
1 HIRES1,0
2 A=160:B=60
3 FORX=0TO-100STEP-1
4 :  C=-60:D=5*INT(SQR(10000-X*X)/5)
5 :  FORY=DTO-DSTEP-5
6 :    E=25+FNA(SQR(X*X+Y*Y))-.6*Y
7 :    IFE>CTHENC=E:PLOTA+X,B+E,1:PLOTA-X,B+E,1
8 :  NEXTY
9 NEXTX
10 FORI=1TO10000:NEXTI:END
Listing 2. Hier die entwirrte (aber langsamere) Routine.
(D. Trepkowski/ah)
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →