C 64
Grafik

Funktionen im Netz

3-D-Funktionsdiagramme sehen nicht nur gut aus, sie liefern auch viele Informationen über mathematische Funktionen.

Mit diesem Programm können Sie Kurven als 3-D-Netzgrafiken zeichnen lassen, in Abhängigkeit von zwei Variablen X und Y. Die Geschwindigkeit, mit der das Maschinenprogramm die notwendigen Bildpunkte berechnet und auf den Bildschirm bringt, läßt die »Kurvendiskussion« zu einem Vergnügen werden. Vor dieses haben die Götter aber bekanntlich die Arbeit gesetzt: Zuerst ist nämlich der umfangreiche Lader mit dem MSE abzutippen. Das Maschinenprogramm selbst ist etwa 2 KByte lang und belegt den Bereich von $C000-$C77F. Es verträgt sich deshalb nicht mit Erweiterungen wie DOS 5.1 und Simons Basic. Für den Aufbau der Grafik wird der gesamte RAM-Bereich von $COOO-$FFFF gebraucht Der gesamte Basic-Speicher mit 38 KByte bleibt also erhalten. Braucht man zusätzlich eigene Grafikroutinen, wie Hardcopy und Beschriftung, müssen diese in den Basic-Speicher gelegt und das Ende des Basic-RAMs herabgesetzt werden. Das Basic-Ende wird durch den Inhalt der Speicherzellen 55 (Low-Byte) und 56 (High-Byte der Endadresse) festgelegt.

Die Funktionen des Zeichenprogrammes werden durch SYS-Befehle in Bild 1 gestartet.

  • NEU=49152 EIN=49241
  • AUS=49252 GSV=49271
  • GLD=49333 ROT=50316
  • XY=50672
Adressen der Befehle
  • SYS NEU, Farbe — löscht Hires-Grafik, setzt Farbe, initialisiert Tabellen. Farbe = 16xPunktfarbe + Hintergrundfarbe
  • SYS EIN — schaltet Grafikmodus ein
  • SYS AUS — schaltet Grafikmodus aus
  • SYS GSV, »Name«, 8 oder 1 — speichert Grafik ab. Da die Grafik unter dem Betriebssystem liegt (ab $E000), wird sie erst nach $A000 kopiert und von dort aus abgespeichert.
  • SYS GLD, »Name«, 8 oder 1 — lädt Grafik mit beliebiger Startadresse
Bild 1. Einsprung-Adressen und deren Funktionen

Sehr elegant wurde die Übergabe von Parametern, wie Definitionsgrenzen und Linienanzahl, an das Maschinenprogramm gelöst. Die einzelnen 3-D-Routinen holen sich die jeweils benötigten Werte aus bestimmten Variablen und der Kurvenfunktion, die Sie im Basic-Programm definieren müssen, bevor Sie mit SYS ROT oder SYS XY die Berechungs- und Zeichenroutine aufrufen. Auf welche Art das Programm eine Funktionsgrafik zeichnet, wird nun gezeigt.

Einfachste Parameterübergabe

Stellen Sie sich einen großen, leeren Raum vor. Auf dem Fußboden sei ein Raster von sagen wir 10x10 Linien gezeichnet. Auf jeden Kreuzungspunkt wird ein Stab mit einer bestimmten Länge gestellt. Die Stablänge entspricht dabei der Höhe eines Funktionswertes an dieser Stelle. Sind alle Stäbe aufgestellt, verbindet man die oberen Enden der Stäbe ebenso wie die unteren und erhält wieder ein Netz. Dieses Netz kann im Gegensatz zum unteren geschwungen sein und stellt die erwünschte dreidimensionale Funktionsgrafik dar. Das Problem der 3-D-Grafik besteht eigentlich aus zwei:

  1. Das Berechnen der Funktionswerte (Stablängen)
  2. Das Zeichnen des oberen Netzes, wobei Linien die »hinter einem Berg« liegen, nicht gezeichnet werden sollen.

Berechnung der Funktionswerte

Nach dem Aufruf mit ROT oder XY berechnet das Programm die benötigten Funktionswerte. Sie müssen dem Programm nur sagen, welche Funktion es berechnen soll. Dazu definieren Sie in einem Basic-Programm einfach die gewünschte Funktion mit DEF FNR(EGAL) und geben einige Parameter an. Das 3-D-Programm holt sich dann selbsttätig die Informationen aus den angelegten Variablen. Das Zeichenprogramm kann, wie bereits erwähnt, auf zwei Arten aufgerufen werden. Mit SYS XY werden X und Y variiert und der dazugehörige Z-Wert (Stablänge) berechnet. Der Vektor vom Ursprung zu einem Kreuzungspunkt auf dem ein Stab steht wird mit dem Satz von Phythagoras berechnet: r2 = x2 + y2. SYS ROT variiert nur X und kann deshalb nur für Funktionen mit einer Variable verwendet werden. In der obigen Gleichung ist Y=X, was bedeutet, daß das Programm in Y-Richtung die gleichen Werte wie in X-Richtung durchläuft um einen 3-D-Effekt zu bekommen. Dies führt zu einer rotationssymmetrischen Figur. Es reicht deshalb aus, nur ein achtel der Figur zu berechnen und dieses dreimal zu spiegeln. Andere Variablen als X werden als Konstanten betrachtet. Die ROT-Routine benötigt neben der Funktion noch die Parameter in Bild 2 und einige Angaben zur Lage der Grafik am Bildschirm. Wenn Sie die beiden Demo-Programme (SYS ROT und SYS XY) abtippen und dort Ihre Funktionen einsetzen, brauchen Sie sich um die folgenden Parameter nicht zu kümmern: Sie werden in diesen Programmen entsprechend Ihren Angaben berechnet.

  • NN% = Anzahl der Netzlinien in X- und Y-Richtung
  • KK% = NN%/2+0,5; halbe Linienanzahl. Mit 0,5 wird gerundet.
  • DD = Faktor für Funktionswert
  • PP = Faktor für Argument
Bild 2. Parameter für SYS ROT

Mit NN% sagen Sie der Routine, aus wievielen Linien das Netz bestehen soll, sowohl in X- und Y-Richtung. KK% teilt der Routine mit, wieviel Linien das in jede Richtung sind; gerechnet von der Mitte des Bildschirms.

DD ist der Maßstab in dem gezeichnet wird. DD gibt an, wieviele Bildpunkte ein Funktionswert von 1 »hoch sein« soll. DD=80 heißt, daß ein Funktionswert von 1 auf dem Bildschirm eine Höhe von 80 Punkten (Pixels) hat.

PP ist der Faktor für den positiven Grenzwert der Funktion. Es gilt: PPxKK%=Xmax. Dabei ist zu beachten, daß nach Phythagoras das Argument in den Ecken um Wurzel 2 größer ist als in X-Richtung (Diagonale eines Quadrates).

Bei SYS XY werden X und Y variiert. In der Funktionsdefinition DEF FNR(EGAL)=SIN(X)*A*COS(Y) werden X und Y verändert; A bleibt während aller Berechnungen konstant und hat den zuletzt zugewiesenen Wert. Die formale Variable EGAL kann nach Lust und Laune benannt werden.

  • FF — Abstand zwischen zwei X-Linien
  • LL — Abstand zwischen zwei Y-Linien
  • X — Startwert von X (Xmin)
  • YY — Startwert von Y (Ymin)
Bild 3. Parameter für SYS XY

Die XY-Routine benötigt anstelle des Funktionsarguments PP einige Angaben (Bild 3).

In der Netzgrafik werden nur sichtbare Linien gezeichnet. Für Interessierte der Algorithmus dazu:

Der Zeichen-Algorithmus

Die Grafik muß von vorne nach hinten gezeichnet werden. Zu jeder Bildschirmspalte muß die Y-Koordinate des höchsten und des tiefsten Punktes gemerkt werden. Soll nun ein Punkt gezeichnet werden, so wird überprüft, ob er zwischen diesen Grenzen liegt. Wenn ja, dann liegt er logischerweise »hinter« der Geraden, die die beiden Extrempunkte verbindet und ist nicht sichtbar. Liegt er nicht auf der Geraden, wird er gezeichnet und als neuer Extremwert gespeichert.

Parameter für SYS ROT und SYS XY

Damit die Lage der Netzgrafik auf dem Bildschirm verändert werden kann, sind noch weitere Parameter nötig, die an das Maschinenprogramm übergeben werden müssen. Mit diesen Angaben kann der Aufsicht- und der Drehwinkel der Grafik festgelegt werden. Mit Änderung des Drehwinkels können Sie die Grafik in XY-Richtung um den Startpunkt P (Bild 4) drehen. Und zwar bis zu 45° im Uhrzeigersinn bis zu 90° im Gegenuhrzeigersinn. Der Aufsichtswinkel liegt im Bereich von 0-90°. Bei 90° sehen Sie genau von oben auf das Netz.

Bild 4. So kann die Netzgrafik in der XY-Ebene gedreht werden

Die Lage des Ursprung-Punktes P0 bestimmen Sie durch Angabe von XX% und YY% (0,0 ist oben links am Bildschirm). Den Drehwinkel können Sie leider nicht direkt in Grad angeben, sondern nur in Form von vier dazu proportionalen Verschiebungsfaktoren, AA%, EE%, BB% und CC%, die voneinander abhängig sind. Bild 5 zeigt Ihnen die Wirkung dieser Faktoren AA% und EE% die für die Y-Verschiebung zuständig sind. In den beiden Demo-Listings sehen Sie, wie die Winkelangabe Grad in diesen Faktor umgerechnet werden.

Bild 5. Verschiebung auf der Y-Achse. Die Koordinaten jedes Punktes Pn sind n-fache von X1 und Y1, X1 wird in AA% übergeben und Y1 in EE%.

Eine Zusammenfassung der Parameter zeigt Bild 6.

  • XX% — X-Koordinate des Ursprungs
  • YY% — Y-Koordinate des Ursprungs
  • AA%, EE% Verschiebungsfaktoren in Y-Richtung
  • BB%, CC% Verschiebungsfaktoren in X-Richtung
Bild 6. Parameter für die Lage der Grafik am Bildschirm. Die Demo-Programme berechnen alle Faktoren aus Ihren Angaben für Aufsichts-, Drehwinkel, Linienzahl und Variablengrenzen.

Allgemeines

  1. Die Linienzahl der Netzgrafik ist auf 60 begrenzt, da die Koordinaten eines jeden Gitterpunktes in einer Tabelle abgespeichert werden. Bei mehr Linien kann die Tabelle solche Ausmaße erreichen, daß das Maschinenprogramm überschrieben wird. Abgesehen davon wird die Bildschirmdarstellung bei mehr als 30 Linien ziemlich unansehnlich. Zu spitze Extremwerte sollten durch eine Verkleinerung der Variable DD sowie durch Erhöhung der Linienzahl verringert werden.
  2. Befindet sich in der Funktion FNR ein Schreibfehler, wird die 3-D-Routine beendet. Da der I/O-Bereich während der Arbeit des Maschinenprogramms abgeschaltet ist, kann keine Fehlermeldung ausgegeben werden. RUN-STOP/RESTORE ist nötig.
  3. Sind die Berechnungen abgeschlossen, wird vor dem Zeichnen der Grafik der Grafikmodus eingeschaltet.

Nun genug der langen Erklärung. Am Besten ist es immer noch, ein wenig mit den Demo-Programmen herumzuprobieren. Wichtige Parameter sind, neben denen die abgefragt werden, noch DD, die Längen LX und LY und die Mittelpunktskoordinaten MY und MX. Durch MY kann die gesamte Grafik am Bildschirm rauf und runter bewegt werden. Bild 7 wurde mit der SYS XY-Routine gezeichnet. Solche Funktionsgraphen können Sie mit dem Demoprogramm auch erzeugen. Probieren Sie einfach mal verschiedene Funktionen aus. Das Bild kann sich schon erheblich ändern, wenn Sie die Parametergrenzen einer Funktion wechseln.

(Martin Rogge/hm)
Bild 7. Solche Grafiken können Sie mit dem SYS YX-Aufruf auch zeichnen lassen.
PROGRAMM : NETZGRAFIK     C000 C781
-----------------------------------
C000 : 20 FD AE 20 9E B7 8A 48   31
C008 : 78 A9 E0 85 23 A0 00 84   7E
C010 : 22 98 A2 20 91 22 C8 D0   1A
C018 : FB E6 23 CA D0 F6 A9 CC   AD
C020 : 85 23 A2 04 68 91 22 C8   8D
C028 : D0 FB E6 23 CA D0 F6 A9   76
C030 : FF A2 C9 20 3B C0 A9 00   57
C038 : A2 CB 58 A0 00 84 22 86   A4
C040 : 23 A2 01 A0 40 91 22 C8   B3
C048 : 88 08 88 28 D0 F7 C6 23   2A
C050 : CA 10 F2 60 00 A9 35 85   18
C058 : 01 AD 00 DD 29 FC A2 3B   67
C060 : A0 38 D0 09 AD 00 DD 09   D6
C068 : 03 A2 1B A0 15 8D 00 DD   11
C070 : 8E 11 D0 8C 18 D0 60 20   16
C078 : FD AE 20 D4 E1 78 A0 00   D3
C080 : 84 22 84 24 A9 FF 85 23   B2
C088 : A9 BF 85 25 A2 20 A9 35   53
C090 : 85 01 B1 22 91 24 C8 D0   45
C098 : F9 C6 23 C6 25 CA D0 F2   68
C0A0 : E6 01 E6 25 A9 24 A2 40   2C
C0A8 : A0 BF 20 D8 FF E6 01 B0   E8
C0B0 : 01 60 4C F9 E0 20 FD AE   98
C0B8 : 20 D4 E1 A9 00 85 B9 AA   58
C0C0 : A0 E0 20 D5 FF B0 EB 60   89
C0C8 : A9 37 85 01 4C 66 FE A5   CE
C0D0 : 14 85 6A A5 15 18 69 C8   3F
C0D8 : 85 6B A0 00 A5 02 D1 6A   C1
C0E0 : B0 02 91 6A E6 6B E6 6B   7F
C0E8 : D1 6A 90 02 91 6A 60 20   81
C0F0 : 2B BC F0 34 10 03 4C 48   17
C0F8 : B2 20 C7 BB A5 61 38 E9   3E
C100 : 81 08 4A 18 69 01 28 90   7B
C108 : 02 69 7F 85 61 A9 04 85   CE
C110 : 67 20 CA BB A9 5C A0 00   B1
C118 : 20 0F BB A9 57 A0 00 20   9F
C120 : 67 B8 C6 61 C6 67 D0 E9   80
C128 : 60 86 A4 C5 A4 B0 03 85   94
C130 : A4 8A 85 22 A9 00 85 24   B8
C138 : 85 25 85 23 18 A5 A4 F0   39
C140 : 1B 46 A4 90 0D 18 A5 22   26
C148 : 65 24 85 24 A5 23 65 25   F9
C150 : 85 25 06 22 26 23 D0 E5   B8
C158 : A5 22 D0 E1 60 86 97 AE   75
C160 : 83 C7 E8 20 29 C1 18 A5   51
C168 : 24 65 97 85 24 90 02 E6   72
C170 : 25 60 20 5D C1 A5 25 18   87
C178 : 69 D0 85 25 60 20 5D C1   4F
C180 : 06 24 26 25 A5 25 18 69   7D
C188 : A0 85 25 60 20 72 C1 A0   1E
C190 : 00 B1 24 60 20 7D C1 A0   B4
C198 : 00 B1 24 AA C8 B1 24 60   3B
C1A0 : 20 72 C1 98 A0 00 91 24   15
C1A8 : 60 08 20 7D C1 98 A0 00   27
C1B0 : 91 24 98 28 2A C8 91 24   F6
C1B8 : 60 20 CF C0 E6 14 D0 02   8B
C1C0 : E6 15 60 20 CF C0 A5 14   0F
C1C8 : 38 E9 01 85 14 B0 02 C6   42
C1D0 : 15 60 8C E1 C1 85 45 85   DD
C1D8 : 46 20 E7 B0 A0 04 B1 47   BE
C1E0 : 99 A8 C7 88 10 F8 60 EA   F0
C1E8 : 85 45 A9 00 85 46 4C E7   06
C1F0 : B0 78 A9 C6 8D FA FF 8D   EB
C1F8 : 18 03 A9 C0 8D FB FF 8D   E8
C200 : 19 03 A9 33 85 01 A0 0F   6D
C208 : 84 02 B9 70 C7 85 45 85   D2
C210 : 46 20 E7 B0 A0 00 B1 47   D6
C218 : AA C8 B1 47 A4 02 99 80   3D
C220 : C7 8A 88 99 80 C7 88 10   0A
C228 : DF 60 85 6A 86 6B AD 8B   78
C230 : C7 38 E5 65 85 6C AD 8F   CB
C238 : C7 AA 10 04 49 FF AA E8   EA
C240 : A5 6A 20 29 C1 A5 24 2C   7A
C248 : 8F C7 10 05 49 FF 18 69   27
C250 : 01 18 65 6C 48 A6 6B AD   07
C258 : 85 C7 20 29 C1 68 38 E5   FA
C260 : 24 A8 A6 6B A5 6A 20 A0   5F
C268 : C1 AD 8F C7 AA 10 04 49   AA
C270 : FF AA E8 A5 6B 20 29 C1   93
C278 : A5 24 2C 8F C7 10 05 49   D0
C280 : FF 18 69 01 18 65 6C 48   F5
C288 : A6 6A AD 85 C7 20 29 C1   25
C290 : 68 38 E5 24 A8 A6 6A A5   C7
C298 : 6B 20 A0 C1 AD 87 C7 A6   F7
C2A0 : 6A 20 29 C1 AD 8D C7 18   33
C2A8 : 65 24 85 6C AD 8C C7 65   37
C2B0 : 25 85 6D AE 89 C7 2C 88   62
C2B8 : C7 10 05 8A 49 FF AA E8   2B
C2C0 : A5 6B 20 29 C1 2C 88 C7   77
C2C8 : 10 0D 38 A5 6C E5 24 A8   F9
C2D0 : A5 6D E5 25 18 90 0A A5   C3
C2D8 : 24 18 65 6C A8 A5 6D 69   2F
C2E0 : 00 C9 01 A6 6B A5 6A 20   A8
C2E8 : A9 C1 AD 87 C7 A6 6B 20   6E
C2F0 : 29 C1 AD 8D C7 18 65 24   32
C2F8 : 85 6C AD 8C C7 65 25 85   F7
C300 : 6D AE 89 C7 2C 88 C7 10   66
C308 : 05 8A 49 FF AA E8 A5 6A   02
C310 : 20 29 C1 2C 88 C7 10 0D   DC
C318 : 38 A5 6C E5 24 A8 A5 6D   F4
C320 : E5 25 18 90 0A A5 24 18   3F
C328 : 65 6C A8 A5 6D 69 00 C9   58
C330 : 01 A6 6A A5 6B 4C A9 C1   17
C338 : A0 01 84 5A 84 5B 84 F7   EA
C340 : 88 84 F8 84 57 84 5E 88   FD
C348 : A5 FC C5 15 90 08 D0 18   3C
C350 : A5 FB C5 14 B0 12 38 A5   AE
C358 : 14 E5 FB 85 F9 A5 15 E5   FB
C360 : FC 85 FA 84 5A 4C 75 C3   D3
C368 : 38 A5 FB E5 14 85 F9 A5   CF
C370 : FC E5 15 85 FA A5 5D C5   33
C378 : 02 B0 0C 38 A5 02 E5 5D   99
C380 : 85 5F 84 5B 4C 8B C3 E5   3D
C388 : 02 85 5F A5 FA D0 19 A5   BF
C390 : F9 C5 5F B0 13 A6 5F 85   49
C398 : 5F 86 F9 A5 5A 85 5E A5   04
C3A0 : 5B 85 57 C8 84 5A 84 5B   91
C3A8 : A5 FA 4A 85 59 A5 F9 6A   8D
C3B0 : 85 58 4C 0D C4 A5 5A 30   59
C3B8 : 08 F0 09 20 B9 C1 4C C4   E3
C3C0 : C3 20 C3 C1 18 A5 02 65   3E
C3C8 : 57 85 02 18 A5 58 65 5F   D7
C3D0 : 85 58 90 02 E6 59 E6 F7   AA
C3D8 : D0 02 E6 F8 A5 59 C5 FA   B4
C3E0 : 90 2B D0 06 A5 F9 C5 58   ED
C3E8 : B0 23 38 A5 58 E5 F9 85   94
C3F0 : 58 A5 59 E5 FA 85 59 A5   BA
C3F8 : 5E 30 08 F0 09 20 B9 C1   8A
C400 : 4C 06 C4 20 C3 C1 18 A5   7A
C408 : 02 65 5B 85 02 A6 02 E0   63
C410 : C8 B0 67 A5 15 C9 01 90   84
C418 : 08 D0 5F A5 14 C9 40 B0   07
C420 : 59 A5 14 85 6A A5 15 18   5A
C428 : 69 C8 85 6B A0 00 8A D1   9C
C430 : 6A 90 08 E6 6B E6 6B D1   00
C438 : 6A 90 3F 4A 4A 4A 0A A8   74
C440 : B9 36 C7 85 8E B9 37 C7   DA
C448 : 85 8F 8A 29 07 18 65 8E   41
C450 : 85 FD A5 14 29 F8 85 8D   4B
C458 : 18 A9 E0 65 8F 85 FE 18   7B
C460 : A5 FD 65 8D 85 FD A5 FE   EC
C468 : 65 15 85 FE A5 14 29 07   47
C470 : A0 00 AA BD 68 C7 11 FD   78
C478 : 91 FD A5 F8 C5 FA 90 09   19
C480 : D0 06 A5 F9 C5 F7 B0 01   DD
C488 : 60 4C B5 C3 20 F1 C1 A9   E0
C490 : 50 85 45 85 46 20 E7 B0   0B
C498 : A0 04 B1 47 99 90 C7 88   DE
C4A0 : 10 F8 A9 44 85 45 85 46   44
C4A8 : 20 E7 B0 A0 04 B1 47 99   1A
C4B0 : 98 C7 88 10 F8 A9 D2 85   83
C4B8 : 45 A9 00 85 46 20 E7 B0   E9
C4C0 : 85 BB 84 BC A9 00 85 BE   0A
C4C8 : AD 81 C7 38 E5 BE B0 05   50
C4D0 : 49 FF 18 69 01 AA 20 29   84
C4D8 : C1 A5 24 85 B5 A5 25 85   4E
C4E0 : B6 A5 BE 85 9E AD 81 C7   B6
C4E8 : 38 E5 9E B0 05 49 FF 18   9B
C4F0 : 69 01 AA 20 29 C1 A5 24   08
C4F8 : 18 65 B5 85 63 A5 25 65   A4
C500 : B6 85 62 A2 90 38 20 49   44
C508 : BC 20 EF C0 A0 C7 A9 90   F8
C510 : 20 28 BA A5 BB 85 4E A5   14
C518 : BC 85 4F 20 09 B4 A0 C7   B7
C520 : A9 98 20 28 BA 20 BF B1   31
C528 : A5 BE A6 9E 20 2A C2 AD   63
C530 : 83 C7 38 E5 BE 48 A6 9E   68
C538 : 20 2A C2 68 A8 AD 83 C7   C1
C540 : 38 E5 9E AA 48 98 20 2A   86
C548 : C2 68 AA A5 BE 20 2A C2   B9
C550 : A6 9E E6 9E EC 81 C7 90   EE
C558 : 8C A6 BE E6 BE EC 81 C7   AD
C560 : B0 03 4C C8 C4 AD 83 C7   15
C568 : 8D 81 C7 20 55 C0 C6 01   24
C570 : A9 00 85 BE A9 00 85 9E   40
C578 : A6 BE F0 2B CA A5 9E 20   B3
C580 : 94 C1 85 15 86 14 A6 BE   1A
C588 : CA A5 9E 20 8C C1 85 02   C1
C590 : A5 9E A6 BE 20 94 C1 85   BE
C598 : FC 86 FB A5 9E A6 BE 20   E5
C5A0 : 8C C1 85 5D 20 38 C3 A6   3A
C5A8 : 9E F0 2D CA 8A A6 BE 20   7C
C5B0 : 94 C1 85 15 86 14 A6 9E   0A
C5B8 : CA 8A A6 BE 20 8C C1 85   C1
C5C0 : 02 A5 9E A6 BE 20 94 C1   D4
C5C8 : 85 FC 86 FB A5 9E A6 BE   54
C5D0 : 20 8C C1 85 5D 20 38 C3   97
C5D8 : A6 9E E6 9E EC 81 C7 90   76
C5E0 : 97 A6 BE E6 BE EC 83 C7   48
C5E8 : 90 8A A9 37 85 01 58 60   91
C5F0 : 20 F1 C1 A9 59 A0 90 20   CB
C5F8 : D2 C1 A9 44 A0 98 20 D2   93
C600 : C1 A9 4C A0 A0 20 D2 C1   97
C608 : A9 46 A0 A8 20 D2 C1 A9   04
C610 : D2 20 E8 C1 85 BB 84 BC   26
C618 : A9 58 20 E8 C1 85 B9 84   4B
C620 : BA A9 59 20 E8 C1 85 A7   0B
C628 : 84 A8 A9 00 85 BE A0 04   44
C630 : B9 90 C7 91 A7 88 10 F8   46
C638 : C8 84 9E A5 7B 48 A5 7A   24
C640 : 48 A0 00 B1 BB 85 7A C8   72
C648 : B1 BB 85 7B 20 8A AD 20   F5
C650 : 79 00 F0 03 4C 08 AF 68   FA
C658 : 85 7A 68 85 7B A0 C7 A9   14
C660 : 98 20 28 BA 20 BF B1 AD   8C
C668 : 8B C7 38 E5 65 85 64 AD   11
C670 : 8F C7 AA 10 04 49 FF AA   6F
C678 : E8 A5 9E 20 29 C1 A5 24   5E
C680 : 2C 8F C7 10 05 49 FF 18   33
C688 : 69 01 18 65 64 48 A6 BE   C5
C690 : AD 85 C7 20 29 C1 68 38   A8
C698 : E5 24 A8 A5 9E A6 BE 20   C8
C6A0 : A0 C1 AD 87 C7 A6 9E 20   E9
C6A8 : 29 C1 AD 8D C7 18 65 24   EA
C6B0 : 85 6C AD 8C C7 65 25 85   AF
C6B8 : 6D AE 89 C7 2C 88 C7 10   1E
C6C0 : 05 8A 49 FF AA E8 A5 BE   63
C6C8 : 20 29 C1 2C 88 C7 10 0D   94
C6D0 : 38 A5 6C E5 24 A8 A5 6D   AC
C6D8 : E5 25 18 90 0A A5 24 18   F7
C6E0 : 65 6C A8 A5 6D 69 00 C9   10
C6E8 : 01 A5 9E A6 BE 20 A9 C1   4F
C6F0 : A0 C7 A9 A0 20 A2 BB A4   42
C6F8 : A8 A5 A7 20 67 B8 A4 A8   81
C700 : A6 A7 20 D4 BB A6 9E E6   56
C708 : 9E EC 81 C7 B0 03 4C 3B   40
C710 : C6 A0 C7 A9 A8 20 A2 BB   DB
C718 : A4 BA A5 B9 20 67 B8 A4   23
C720 : BA A6 B9 20 D4 BB A6 BE   E3
C728 : E6 BE EC 83 C7 B0 03 4C   BF
C730 : 2E C6 4C 6B C5 00 00 00   9E
C738 : 40 01 80 02 C0 03 00 05   87
C740 : 40 06 80 07 C0 08 00 0A   E5
C748 : 40 0B 80 0C C0 0D 00 0F   42
C750 : 40 10 80 11 C0 12 00 14   9F
C758 : 40 15 80 16 C0 17 00 19   FD
C760 : 40 1A 80 1B C0 1C 00 1E   5A
C768 : 80 40 20 10 08 04 02 01   BD
C770 : CB CB CE CE C3 C3 C1 C1   93
C778 : C2 C2 D9 D9 D8 D8 C5 C5   44
C780 : 02                        06
Listing 1. 3-D-Grafikroutine. Das Listing muß mit dem MSE eingegeben werden.
10 ein=49241 :rem  grafik ein
20 aus=49252 :rem  grafik aus
30 neu=49152 :rem  loeschen + farbe
40 gsv=49271 :rem  save
50 gld=49333 :rem  load
60 rot=50316 :rem  rotationskoerper
70 xy =50672 :rem  x.y-grafik
80 :
100 poke53280,6:poke53281,5:sysneu,5
110 deffnr(x)=cos(x)+cos(3*x)+cos(5*x)
120 print"{clr}{blk}+++++++  rotationskoerper-demo  ++++++++{down}{down}{down}{down}{down}{down}":uu=~/180
130 u=-10:input"drehwinkel (-45 bis 90) .. ";u:ifu<-45oru>90then130
140 l=160:my=99:mx=159:sn=sin(uu*u):cs=cos(uu*u)
150 v=70:input"{down}{down}aufsichtswinkel (0 bis 90) ";v:ifv>90orv<0then150
160 sm=sin(v*uu)
165 xx%=mx-l/sqr(2)*sin((45-u)*uu)+.5:yy%=my+l/sqr(2)*cos((45-u)*uu)*sm+.5
170 nn%=20:input"{down}{down}anzahl der linien ........ ";nn%:ifnn%>60ornn%<3then170
180 kk%=nn%/2+.5
190 a=l*cs/nn%:b=-l*sn/nn%:cc%=a*sm+.5:ee%=b*sm+.5:dd=cos(v*uu)*30
200 aa%=a+.5:bb%=b+.5
220 pp=2:input"{down}{down}maximales x .............. ";pp:pp=2*pp/nn%
230 sysrot
240 print"{clr}":wait198,1:poke198,0:sysaus
Listing 2. Demo-Programm zu SYS ROT
10 ein=49241 :rem  grafik ein
20 aus=49252 :rem  grafik aus
30 neu=49152 :rem  loeschen + farbe
40 gsv=49271 :rem  save
50 gld=49333 :rem  load
60 rot=50316 :rem  rotationskoerper
70 xy =50672 :rem  x.y-grafik
80 :
100 poke53280,6:poke53281,5:sysneu,5
110 deffnr(egal)=sin(x)*cos(y)
120 print"{clr}{blk}+++++++  f(x,y)-netzgrafik-demo  +++++++{down}{down}{down}{down}":uu=~/180
130 u=18:input"drehwinkel (-45 bis 90) .. ";u:ifu<-45oru>90then130
140 lx=190:ly=190:my=99:mx=159:sn=sin(uu*u):cs=cos(uu*u)
150 v=45:input"{down}{down}aufsichtswinkel (0 bis 90) ";v:ifv>90orv<0then150
160 sm=sin(v*uu)
165 xx%=mx-lx/sqr(2)*sin((45-u)*uu)+.5:yy%=my+ly/sqr(2)*cos((45-u)*uu)*sm+.5
170 nn%=20:input"{down}{down}anzahl der x-linien ...... ";nn%:ifnn%<3ornn%>60then170
175 kk%=20:input"{down}{down}anzahl der y-linien ...... ";kk%:ifkk%<3ornn%>60then175
180 aa%=ly*cs/kk%+.5:bb%=-lx*sn/nn%+.5:cc%=lx*cs/nn%*sm+.5
190 ee%=-ly*sn/kk%*sm+.5:dd=cos(v*uu)*30
220 x=-6.3:u=3.2:input"{down}{down}grenzen (x0,x1) .......... ";x,u
225 yy=-3.2:v=6.3:input"{down}{down}grenzen (y0,y1) .......... ";yy,v
230 ff=(u-x)/nn%:ll=(v-yy)/kk%
380 sysxy
390 print"{clr}":wait198,1:poke198,0:sysaus
Listing 3. Demo-Programm zu SYS XY
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →