VC 20
Grafik

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).

Bild 1. Die Funktion \( z = 5 + 5 \left( \sin\left(\frac{\pi}{10}\right) \cdot \sin\left(\frac{2\pi}{20} y\right) \right)^{11} \) mit Augpunkt (50,20,20) in Gitternetz-Darstellung

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)
Bild 2. Die Funktion \( z = 5 - 5 \left( \sin\left(\frac{\pi}{10}\right) \cdot \sin\left(\frac{\pi}{10} y\right) \right)^4 \) mit Augpunkt (50,20,20) in der Darstellung mit zufällig ausgewählten Punkten
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
Programmaufbau
|
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
  1 XA=50:YA=20:ZA=20 
  2 PRINT"{CLR}3-D-FUNKTIONEN":PRINT"R.DOERR,22.10.84":PRINT"TASTE!" 
 15 GET A$:IF A$="" THEN15 
 20 P=36864:POKE P+3,161:POKE 55,0:POKE 56,20:POKE P+1,18:POKE P,10:POKE P+2,153:PRINT"{CLR}" 
 25 POKE 0,10:POKE 1,0:FOR I=828 TO846:READ P:POKE I,P:NEXT :POKE 2,20:SYS 828:POKE 36869,253 
 100 Y=200:FOR X=42 TO125STEP 1:GOSUB 4000:NEXT :X=42:FOR Y=95 TO200STEP 1:GOSUB 4000:NEXT 
 110 FOR X=0 TO1STEP .1:Y=0:Z=0:H=X:GOSUB 310:X=H:NEXT 
 250 FOR XH=0 TO10:FOR YH=0 TO10STEP .05:X=XH:Y=YH:GOSUB 300:NEXT :NEXT 
 260 FOR YH=0 TO10:FOR XH=0 TO10STEP .05:X=XH:Y=YH:GOSUB 300:NEXT :NEXT 
 280 GOTO 15 
 290 : 
 300 Z=5-5*(SIN (.314*X)*SIN (.314*Y))^4 
 310 D=XA-X:IF D=0 THEN360 
 320 YS=15.7*(Y-X*(YA-Y)/D)+42:ZS=(-20)*(Z-X*(ZA-Z)/D)+200 
 340 IF YS<0OR YS>199OR ZS<0OR ZS>255 THEN360 
 350 X=YS:Y=ZS:GOSUB 4000 
 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 IF PEEK (Z)=32 THENBC=BC+1:POKE Z,BC:POKE ZF,6 
 4055 IF BC>159 THEN280 
 4060 B=5120+16*PEEK (Z)+BY:P=PEEK (B)OR 2^BI:POKE B,P:RETURN 
 5000 DATA 162,0,169,0,160,0,145,1,200,208,251,230,2,232,228,0,208,242,96 
Listing. Das Programm zur Darstellung dreidimensionaler Funktionen auf dem VC 20
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →