Supergrafik III
Klein, aber oho! Dreidimensionale Grafiken sind auch mit der Grundversion des VC 20 möglich.
Das vorliegende Programm ist eine Anwendung des im 64’er, Ausgabe 11/84, Seite 73 abgedruckten Programms »Supergrafik II« für hochauflösende Grafik (200 x 256 Punkte) auf dem VC 20. Es ermöglicht die Darstellung dreidimensionaler Funktionsgrafiken auf dem Bildschirm.
Eine kurze Erläuterung der 3-D-Technik:
Der Graph einer Funktion zweier Variablen in einem X-Y-Z-Diagramm ist in grafischer Darstellung ein gekrümmtes Flächenstück. Das Problem besteht nun darin, diese Fläche im Raum auf den zweidimensionalen Bildschirm abzubilden.
Das Programm verwendet den 1. Oktanten eines rechtshändigen dreidimensionalen Koordinatensystems, dessen Y-Z-Ebene (Projektionsebene) parallel zum Bildschirm verläuft. Die Länge der Achsen beträgt zehn Einheiten.
Vor dem eigentlichen Programmlauf werden in Zeile 1 die räumlichen Koordinaten des gedachten Auges A(XA;YA;ZA) und in Zeile 300 die gewünschte Funktion eingegeben. Eine Änderung des »Augpunktes« A führt zu einer anderen Perspektive. Die Projektion besteht nun darin, daß ein Punkt des Graphen, der nicht in der Y-Z-Ebene liegt, in diese vom Augpunkt A aus projiziert wird. Der VC 20 ermittelt die Koordinaten des projizierten Punktes und bringt diesen auf den Bildschirm (Bild 1).

Die relevanten Punkte des Funktionsgraphen werden gewonnen durch Wahl eines Punktes (X,Y,0) auf einem 10 x 10 Gitternetz in der X-Y-Koordinatenebene und Berechnung der Z-Koordinate mit Hilfe der Funktionsgleichung. Dies ergibt die plastische Wirkung, vergleichbar mit dem Schatten eines Gitternetzes auf dem Funktionsgraphen (Bild 1).
Einen recht reizvollen Eindruck (Bild 2) gewinnt man alternativ, wenn die Koordinaten X und Y zufällig per RND-Funktion ausgewählt werden. Dazu ist die Programmzeile 250 zu ersetzen durch:
250 X = 10 * RND(1): Y = 10*RND(1):GOSUB 300:GOTO 250
Die Programmzeilen 260 und 280 können dann gelöscht werden.
Um Speicherplatz zu sparen, wurde auf Kommentare im Programm und Grundsätze zur übersichtlichen Programmmierung bewußt verzichtet.
(Rudolf Dörr/ev)
Zeile | |
---|---|
1 | Augpunkt definieren |
20,25,4000-5000 | siehe 64’er, Ausgabe November 1984, Seite 73 |
100,110 | Koordinatenachsen |
250-260 | Wahl der Koordinaten X und Y |
300-360 | Berechnung der 3. Koordinate durch die Funktionsgleichung und Berechnung der Koordinaten des Grafikpunktes |
1 xa=50:ya=20:za=20 2 print"{clr}3-d-funktionen":print"r.doerr,22.10.84":print"taste!" 15 geta$:ifa$=""then15 20 p=36864:pokep+3,161:poke55,0:poke56,20:pokep+1,18:pokep,10:pokep+2,153:print"{clr}" 25 poke0,10:poke1,0:fori=828to846:readp:pokei,p:next:poke2,20:sys828:poke36869,253 100 y=200:forx=42to125step1:gosub4000:next:x=42:fory=95to200step1:gosub4000:next 110 forx=0to1step.1:y=0:z=0:h=x:gosub310:x=h:next 250 forxh=0to10:foryh=0to10step.05:x=xh:y=yh:gosub300:next:next 260 foryh=0to10:forxh=0to10step.05:x=xh:y=yh:gosub300:next:next 280 goto15 290 : 300 z=5-5*(sin(.314*x)*sin(.314*y))^4 310 d=xa-x:ifd=0then360 320 ys=15.7*(y-x*(ya-y)/d)+42:zs=(-20)*(z-x*(za-z)/d)+200 340 ifys<0orys>199orzs<0orzs>255then360 350 x=ys:y=zs:gosub4000 360 return 4000 : 4010 y=int(y+.5):x=int(x+.5):xs%=int(x/8):ys%=int(y/16) 4040 by=y-ys%*16:bi=7-x+xs%*8:z=7680+xs%+25*ys%:zf=z+30720 4050 ifpeek(z)=32thenbc=bc+1:pokez,bc:pokezf,6 4055 ifbc>159then280 4060 b=5120+16*peek(z)+by:p=peek(b)or2^bi:pokeb,p:return 5000 data162,0,169,0,160,0,145,1,200,208,251,230,2,232,228,0,208,242,96