QUICK Ecke 32 von Harald Schönfeld Moirees in QUICK Jeder der schon mal Grafikspielereien auf seinem 8 Bitter programmiert hat, wird sie schon einmal gesehen haben+) Moireemuster. Das sind Muster die entstehen, wenn sich Linien so überlagern, daß sie Muster ergeben, die ganz anders aussehen als die eigentlichen einfachen Linienzüge. Natürlich kann man das nicht nur in BASIC programmieren, sonden auch QUIC eignet sich sehr gut dazu. GrundsAtzlich braucht man nur eine Linie, die sich über den Bildschirm bewegt. Dazu legt man die Linie mit 2 koordinatenpaaren (x1,Y1) und (X2,Y2) fest. Dann malt man die Linie mit Plot und Draw. Danach ändert man die beiden Positionen ab. Dazu benützt man 2 weitere Wertepaare (X1V,Y1V) und (X2V,Y2V) die die Änderung der Positionen pro Zeichenschritt angeben. Z.B. liegen diese Geschwindigkeitswerte zwischen 0 und 3. Man addiert also diese Geschwindigkeiten zu den Positionen und kann so die Linie an der nächsten Stelle zeichnen, usw. Damit sich Moireemuster ergeben sollte ma allerdings sich überlagernde Linien verwenden. Dazu benuzt man z.B. den trick, daß man die Linie einfach an der Vertikalen und Horizontalen spiegelt. Schon hat ma 4 sich bewegende Linie, die sich bestimmt auch überlagern. Das Spiegeln ist ganz einfach. Eine vertikae Spiegelung bedeutet, daß die X-koordinate von 159 (Bildschirmbreite) abgezogen werden muß um die gespiegelte Position zu erhalten. Horizontal wird die Y-Koordinate von 191 abgezogen. Irgendwann kommt dann der Fall, daß die Koordinaten der Linie den Bildschirmbereich verlassen. Das mußma natürlich verhindern. im heutigen Programm lassen wir dabei einfach die Linie an der alten Anfangsposition wieder starten. Die überprüfung ob X kleiner 0 oder x größer 159 wurde (öBildscirm verlassen) geht ganz einfach, da BYTE Varialen ja im UNSIGN Modus vergliechen werden. Mit IF X>159 haben wir beide Fälle abgedecht, weil z.B. -1=255 ist. Damit das Ganze noch etwas schöner aussieht, sollte ma zwischendrin natürlich auch mal die Farben ändern und wenn der Bildschirm zu voll wurde auc mal den Schirm wieder löschen. Letzteres erledigt der Befehl COLOR(125) PLOT(0,0) am einfachsten. Tja, und schon habe wir ein Programm, das hübsche Muster auf den Bildschirm zauber. Im nächsten Teil werde wir dann sehen, wie man die Muster noch etwas komplexer und abwechslungsreicher gestalten kann. BYTE +( * Anfangspos., Geschwindigkeit X1,Y1,XV1,YV1 * Endpos., Geschwindigkeit X2,Y2,XV2,YV2 * temporaere Pos. X,Y * Farben C1,C2 * Zufallszahlenregister RND=53770 +) MAIN * Grafik 15ohne Textfenster oeffnen CLOSE(6) OPEN(6,12,15,"S:") * Variablen init .INIT REPEAT * Linie 1 zeichnen COLOR(C1) PLOT(X1,Y1) DRAW(X2,Y2) * vertikal gespiegelt COLOR(C2) SUB(159,X1,X) PLOT(X,Y1) SUB(159,X2,X) DRAW(X,Y2) * horizontal gespiegelt SUB(191,Y1,Y) PLOT(X1,Y) SUB(191,Y2,Y) DRAW(X2,Y) COLOR(C1) * hor + vert gespiegelt SUB(159,X1,X) SUB(191,Y1,Y) PLOT(X,Y) SUB(159,X2,X) SUB(191,Y2,Y) DRAW(X,Y) * Neue Positionen berechnen ADD(X1,XV1,X1) ADD(X2,XV2,X2) ADD(Y1,YV1,Y1) ADD(Y2,YV2,Y2) * Fallsam Rand angekommen * neue Linie starten IF X1>159 .INIT ELSE IF Y1>191 .INIT ENDIF ENDIF IF X2>159 .INIT ELSE IF Y2>191 .INIT ENDIF ENDIF UNTIL 1=0 ENDMAIN PROC INIT BEGIN * Anfags- und Endpos der Linie X1=0 Y1=0 X2=79 Y2=0 * Zufaellge Geschwindigkeit der * Endpunkte AND(RND,3,XV1) AND(RND,3,YV1) AND(RND,3,XV2) AND(RND,3,YV2) * Nicht alle Geschwindigkeiten duerfen * Null sein IF XV1=0 IF XV2=0 XV1=1 ENDIF ENDIF IF YV1=0 IF YV2=0 YV1=1 ENDIF ENDIF * Farben bestimmen, aber nicht 0 AND(RND,3,C1) AND(RND,3,C2) IF C1=0 C1=1 ENDIF IF C2=0 C2=2 ENDIF * Hin und wieder Bildschirm loeschen IF RND<25 COLOR(125) PLOT(0,0) ENDIF ENDPROC