Nachdem es sich ja schon andeutete und v.a. da die Linienroutine nun dank detlef extra gut optimiert ist und flott funktioniert (Thread), kann man ja mal noch einen Versuch wagen, die Punkte anders zu bewegen.
Der eigentliche Witz dabei bleibt nach wie vor das "schnelle Zeichnen" per Array, nur daß diesmal die Endpunkte der Linien nicht mehr aus der Vorgängerlinie ermittelt werden sondern direkt berechnet. Dazu werden beide Endpunkte jeweils mittels Sinus- bzw. Cosinusfunktionen für die X bzw. Y Werte über den Bildschirm bewegt und zwischen ihnen die "LINE" gezeichnet.
( Leider fällt dabei natürlich der interessante Fakt weg, daß der Vorgängerwert direkt zur Berechnung benutzt wird.)
Es eröffnen sich wieder jede Menge Möglichkeiten damit herumzuspielen !
Gute Bastelparameter sind die Werte, die jede Runde erhöht werden ( fx0, fy0, fx1, fy1 ) und ihre Verhältnisse zueinander. Zudem kann man durch Ändern ihrer Startwerte schöne andere Muster erhalten.
Und damit es bißchen flexibler und potentiell schneller wird, gibt es das Ganze auch noch mit einer fixen Winkeltabelle (eine für Sinus- und eine für Cosinus). Formal würde ja eine einzige völlig reichen und eine Winkelverschiebung um 90 Grad, aber so kann man die Bildschirmgrößen da bereits direkt für X,Y mit reinrechnen.
SCREEN 12
x = 640: y = 480
u = 24
DIM x0(u), x1(u), y0(u), y1(u) AS INTEGER
a = 0
WHILE INKEY$ <> CHR$(32)
a = (a + 1) MOD u
LINE (x0(a), y0(a))-(x1(a), y1(a)), 0
fx0 = fx0 + .07
IF fx0 > 6.28 THEN fx0 = fx0 - (2 * PI)
fy0 = fy0 + .05
IF fy0 > 6.28 THEN fy0 = fy0 - (2 * PI)
x0(a) = SIN(fx0) * 320 + 320
y0(a) = COS(fy0) * 240 + 240
fx1 = fx1 + .02
IF fx1 > 6.28 THEN fx1 = fx1 - (2 * PI)
fy1 = fy1 + .035
IF fy1 > 6.28 THEN fy1 = fy1 - (2 * PI)
x1(a) = SIN(fx1) * 320 + 320
y1(a) = COS(fy1) * 240 + 240
LINE (x0(a), y0(a))-(x1(a), y1(a))
WEND
Alles anzeigen
SCREEN 12
x = 640: y = 480
x50% = x / 2
y50% = y / 2
u = 24
DIM x0(u), x1(u), y0(u), y1(u) AS INTEGER
PI = 3.141: PI2 = 6.282
DIM winkeltabx(628), winkeltaby(628) AS INTEGER
FOR i = 0 TO 627
winkeltabx(i) = SIN((i * PI2) / 628) * x50% + x50%
winkeltaby(i) = COS((i * PI2) / 628) * y50% + y50%
IF i / 157 = INT(i / 157) THEN PRINT ".";
NEXT i
CLS
fx0 = 0: fy0 = 157
fx1 = 0: fy1 = 0
a = 0
WHILE INKEY$ <> CHR$(32)
a = (a + 1) MOD u
LINE (x0(a), y0(a))-(x1(a), y1(a)), 0
fx0 = fx0 + 5: IF fx0 >= 628 THEN fx0 = fx0 - 628
fy0 = fy0 + 4: IF fy0 >= 628 THEN fy0 = fy0 - 628
x0(a) = winkeltabx(fx0)
y0(a) = winkeltaby(fy0)
fx1 = fx1 + 2: IF fx1 >= 628 THEN fx1 = fx1 - 628
fy1 = fy1 + 3: IF fy1 >= 628 THEN fy1 = fy1 - 628
x1(a) = winkeltabx(fx1)
y1(a) = winkeltaby(fy1)
LINE (x0(a), y0(a))-(x1(a), y1(a))
WEND
Alles anzeigen