• QBasic - Geometrie

Achsenkreuz

Der Grafikbildschirm im Modus 12 besteht aus 640 Spalten und 480 Zeilen. An jedem Kreuzungspunkt einer Spalte mit einer Zeile kann ein Punkt in einer von 16 Farben gesetzt werden (=Pixel).


Das folgende Programm zeichnet ein beschriftetes Achsenkreuz in der Farbe gelb im Bereich von -5 bis 5 (X - Wert) und -4 bis 4 (y - Wert). Speichere unter akreuz.bas

REM Achsenkreuz
SCREEN 12
CLS
farbe = 14 : REM Farbe gelb

REM x-Achse
LINE (0, 232)-(639, 232), farbe
LINE (639, 232)-(635, 228), farbe
LINE (639, 232)-(635, 236), farbe
FOR i = -8 TO 8
LINE (320 + i * 40, 230)-(320 + i * 40, 234), farbe
NEXT i
FOR i = -7 TO 7
IF i <> 0 THEN
LOCATE 16, (i + 8) * 5: PRINT i
END IF
NEXT i

REM y-Achse
LINE (320, 0)-(320, 479), farbe
LINE (320, 0)-(316, 4), farbe
LINE (320, 0)-(324, 3), farbe
FOR i = -5 TO 5
LINE (318, 232 + i * 48)-(322, 232 + i * 48), farbe
NEXT i
FOR i = -4 TO 4
IF i <> 0 THEN
LOCATE 30 - (i + 5) * 3, 42: PRINT i
END IF
NEXT i

Eine Einheit in Richtung der x-Achse umfasst 40 Pixel, die y-Achse selbst wird bei x=320 gezeichnet. In Richtung der y-Achse werden für eine Einheit 48 Pixel verwendet, die x-Achse wird bei y=232 gezeichnet.

Punkte im Achsenkreuz

Füge an das obige Programm die Zeile


PSET (320+(-2)*40,232-(+3)*48),farbe

an. Welche Koordinaten (in Einheiten des Achsenkreuzes) hat der gezeichnete Punkt?
Zeichne auch die Punkte P(4/3), Q(-2/-1), R(3/-1) und S(-4/2). Verwende dazu verschiedene Farben (von Farb-Nummer 1 bis 15). Füge dazu vier neue Zeilen an das Programm an und ersetze die Variable farbe durch die entsprechende Farbnummer.

Um das Setzen von Punkten im Programm 'Achsenkreuz' zu vereinfachen, kann man eine entsprechende Subroutine schreiben.


Entferne im Programm 'Achsenkreuz' zunächst alle selbst angefügten Zeilen und ergänze dann das Programm um die Zeile Plot 1,-3,farbe.
Bewege die Schreibmarke unter einen Buchstaben des Wortes Plot und erzeuge mit Bearbeiten - Neue Sub einen Rahmen für die neue Subroutine. Der Bildschirm hat daraufhin zunächst folgendes Aussehen:


SUB Plot
END SUB

Ergänze dann dieses Unterprogramm wie folgt:

SUB Plot (x,y,f)
PSET (320+x*40,232-y*48),f
END SUB

Diesem Unterprogramm wird beim Aufruf eine x- und eine y-Koordinate sowie eine Farbe übergeben. Der PSET-Befehl berechnet dann für das durch das Hauptprogramm gezeichnete Achsenkreuz die Pixelkoordinaten und zeichnet den gewünschten Punkt in der entsprechenden Farbe. Speichere unter akreuz1.bas


Zeichne mit Hilfe des Unterprogrammes Plot die Punkte P(4/3), Q(-2/-1), R(3/-1) und S(-4/2). Verwende dazu verschiedene Farben (von Farb-Nummer 1 bis 15). Füge dazu die vier entsprechenden neuen Zeilen an das Hauptprogramm an.


Die gezeichneten Punkte auf dem Bildschirm sind sehr klein. Um die Punkte etwas besser erkennen zu können, kann man statt eines Punktes vier Punkte zeichnen.
Wechsle mit Ansicht - Subs zum Unterprogramm Plot und ergänze das Unterprogramm wie folgt (akreuz3.bas):


SUB Plot (x,y,f)
PSET (320+x*40,232-y*48),f
PSET (321+x*40,232-y*48),f
PSET (320+x*40,233-y*48),f
PSET (321+x*40,233-y*48),f
END SUB

Wechsle zurück zum Modul des Hauptprogrammes und starte das Programm. Beobachte die veränderte Bildschirmausgabe.

 

Geraden im Achsenkreuz

Um zwei Punkte im Achsenkreuz durch eine Linie zu verbinden werden die Koordinaten des Anfangs- und des Endpunktes benötigt.


Das Programm 'Achsenkreuz' wird um eine weitere Subroutine erweitert. Entferne dazu zunächst sämtliche Plot-Befehle am Ende des Hauptprogramms. Füge dann die Zeile

Connect x1,y1,x2,y2,f

an das Hauptprogramm an. Die ersten beiden Zahlenangaben sind die Koordinaten des Anfangspunktes, dann folgen die zwei Zahlenangaben für den Endpunkt. Die letzte Zahlenangabe gibt die zu verwendende Farbe an.

Bewege die Schreibmarke unter einen Buchstaben des Wortes Draw und erzeuge mit Bearbeiten - Neue Sub einen Rahmen für die neue Subroutine. Der Bildschirm hat daraufhin zunächst folgendes Aussehen:

SUB Connect

END SUB

Ergänze dann dieses Unterprogramm wie folgt:
SUB Connect (x1,y1,x2,y2,f)
LINE (320+x1*40,232-y1*48)-(320+x2*40,232-y2*48),f
END SUB

Weiter mit Lektion 7


Aufgaben

  1. Ändere das Programm akreuz1.bas, dass es bei Eingabe von x und y den entsprechenden Punkt darstellt. Speichere unter akreuz2.bas
  2. Schreibe ein programm akreuz4.bas, welches bei Eingabe von zwei Koordinaten die entsprechende Linie zeichnet. Darüber hinaus solld das Programm die Steigung a, den Schnittpunkt mit der y Achse (b) und die Funktionsgleichung ausgeben. Dazu die folgenden Hinweise:
  • a = (y2-y1)/(x2-x1)
  • b = (y2-y1)
  • Funktionsgleichung: y = ax + b




... zurück zum Inhalt