 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Grafixfan

Anmeldungsdatum: 24.03.2007 Beiträge: 17 Wohnort: Bayreuth
|
Verfasst am: 17.05.2007, 11:08 Titel: Gerechnete Grafik 2 (Iterationen und Nagelbrett) |
|
|
Hier die zweite Folge gerechneter Grafik.
Iterationen bedeuten hier Annäherung.
Man zeichnet zwei Funktionen/Kurven (Gerade, Sinus, usw);
dann zeichnet man eine Gerade auf die 1. Funktion zu, bis sie diese trifft;
dann zeichnet man von diesem "Treffpunkt" im rechten Winkel der ersten Geraden eine weitere Gerade, bis diese auf die 2. Funktion trifft; dann von da wieder rechtwinklig auf die 1. Funktion usw.
Das Programm "Prog 1 iterat" zeigt langsam, wie's abläuft;
"Prog 2 iterat" fängt mit immer neuen, in x verschobenen Geraden an,
und das Programm "Nagelbrett" nagelt flott, obwohl mit sleep gebremst, ein Muster auf den Monitor. Nagelbretter erzeugte man in grauer Vorzeit, indem man mit Nägeln eine Struktur auf ein Brett nagelte und diese mit Draht oder Faden zu einem Muster verband.
Viel Spaß
Code: |
''Programm 1 (iterat):
'Eine Linie springt zwischen zwei Kurven hin und her und
''nähert sich einem Schnittpunkt in Sprüngen = Iteration:
screen 19,8
dim as single x,y,p,i,a,b,w
''1. Kurve: Teil einer quadratischen Funktion:
FOR x = -20 TO 20 STEP .01
y = x ^ 2
PSET (x * 15 + 400,y + 100),10
NEXT x
''2. Kurve: schräge Gerade:
p = 650
FOR x = 100 TO 700 STEP 1
y = p - x
PSET (x,y),14
NEXT x
''Anfang erste sich nähernde Gerade:
x = 230
y = 500
PSET (x,y),20
''Damit es nicht zu schnell anfängt...
sleep 500
''20 mal (mal zweimal) soll der Algorithmus annähern:
FOR i = 1 TO 20
''Funktion y(x) umgedreht in x(y); etwas unübersichtlich wegen der Maßstäbe,
''der Schnittpunkt mit der nächsten Kurve und damit die nächste Gerade entsteht:
b = ((x - 400) / 15) ^ 2 + 100
a = x
''Für buntere Grafik z.B. color i anstelle von color 15.
COLOR 15
line (x,y)-(a,b)
''Damit man sieht, wie es abläuft; sleep zum weiteren Probieren löschen:
sleep (600-i*20)
x = a
y = b
b = y
''Funktion y(x) umgedreht in x(y):
a = p - y
''Für buntere Grafik z.B. color i anstelle von color 15.
COLOR 15
line (x,y)-(a,b)
''Damit man sieht, wie es abläuft; sleep zum weiteren Probieren löschen:
sleep (600-i*20)
x = a
y = b
NEXT i
sleep
END 0
|
''Programm 2 (iterat mehrfach):
''Eine Linie springt zwischen zwei Kurven hin und her und
''nähert sich einem Schnittpunkt in Sprüngen = Iteration.
''Desgleichen springen weitere (w/step w) Linien:
screen 19,8
dim as single x,y,p,i,a,b,w
FOR x = -20 TO 20 STEP .01
y = x ^ 2
PSET (x * 15 + 400,y + 100),10
NEXT x
p = 650
FOR x = 100 TO 700 STEP 1
y = p - x
PSET (x,y),14
NEXT x
''50 verschiedene Linien beginnen von unten.
for w=0 to 500 step 10
x = 150+w
y = 500
sleep 100
PSET (x,y),20
FOR i = 1 TO 30
b = ((x - 400) / 15) ^ 2 + 100
a = x
COLOR i
line (x,y)-(a,b)
x = a
y = b
b = y
a = p - y
COLOR i
line (x,y)-(a,b)
x = a
y = b
NEXT i
next w
sleep
END 0
[code]
''Nagelbrett
screen 20,8
dim as single xn,an,yn,bn,cn,in
dim as double tn
xn = 100
an = 384
yn = 100
bn = 384
cn = 512
sleep 500
FOR in = 0 TO 6.28 STEP 0.31415/2
xn = SIN(in) * 300 + 512
yn = COS(in) * 300 + 384
FOR an = 212 TO 812 STEP 100
COLOR in+1
line (xn,yn)-(an,bn)
NEXT an
FOR an = 84 TO 734 STEP 100
COLOR in+2
''Damit's langsam abläuft...
for tn =1 to 1000000
next tn
line (xn,yn)-(cn,an)
NEXT an
NEXT in
sleep
end 0 |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 16.06.2007, 00:30 Titel: |
|
|
Da haste wohl was mit den Codetags falsch gemacht
Also ich habs so umgesetzt dass es wieder Codetags sind
Code: | ''Programm 1 (iterat):
'Eine Linie springt zwischen zwei Kurven hin und her und
''nähert sich einem Schnittpunkt in Sprüngen = Iteration:
screen 19,8
dim as single x,y,p,i,a,b,w
''1. Kurve: Teil einer quadratischen Funktion:
FOR x = -20 TO 20 STEP .01
y = x ^ 2
PSET (x * 15 + 400,y + 100),10
NEXT x
''2. Kurve: schräge Gerade:
p = 650
FOR x = 100 TO 700 STEP 1
y = p - x
PSET (x,y),14
NEXT x
''Anfang erste sich nähernde Gerade:
x = 230
y = 500
PSET (x,y),20
''Damit es nicht zu schnell anfängt...
sleep 500
''20 mal (mal zweimal) soll der Algorithmus annähern:
FOR i = 1 TO 20
''Funktion y(x) umgedreht in x(y); etwas unübersichtlich wegen der Maßstäbe,
''der Schnittpunkt mit der nächsten Kurve und damit die nächste Gerade entsteht:
b = ((x - 400) / 15) ^ 2 + 100
a = x
''Für buntere Grafik z.B. color i anstelle von color 15.
COLOR 15
line (x,y)-(a,b)
''Damit man sieht, wie es abläuft; sleep zum weiteren Probieren löschen:
sleep (600-i*20)
x = a
y = b
b = y
''Funktion y(x) umgedreht in x(y):
a = p - y
''Für buntere Grafik z.B. color i anstelle von color 15.
COLOR 15
line (x,y)-(a,b)
''Damit man sieht, wie es abläuft; sleep zum weiteren Probieren löschen:
sleep (600-i*20)
x = a
y = b
NEXT i
sleep
END 0 |
Nr2:
'Programm 2 (iterat mehrfach):
''Eine Linie springt zwischen zwei Kurven hin und her und
''nähert sich einem Schnittpunkt in Sprüngen = Iteration.
''Desgleichen springen weitere (w/step w) Linien:
Code: |
screen 19,8
dim as single x,y,p,i,a,b,w
FOR x = -20 TO 20 STEP .01
y = x ^ 2
PSET (x * 15 + 400,y + 100),10
NEXT x
p = 650
FOR x = 100 TO 700 STEP 1
y = p - x
PSET (x,y),14
NEXT x
''50 verschiedene Linien beginnen von unten.
for w=0 to 500 step 10
x = 150+w
y = 500
sleep 100
PSET (x,y),20
FOR i = 1 TO 30
b = ((x - 400) / 15) ^ 2 + 100
a = x
COLOR i
line (x,y)-(a,b)
x = a
y = b
b = y
a = p - y
COLOR i
line (x,y)-(a,b)
x = a
y = b
NEXT i
next w
sleep
END 0 | Nr.3:
Code: | ''Nagelbrett
screen 20,8
dim as single xn,an,yn,bn,cn,in
dim as double tn
xn = 100
an = 384
yn = 100
bn = 384
cn = 512
sleep 500
FOR in = 0 TO 6.28 STEP 0.31415/2
xn = SIN(in) * 300 + 512
yn = COS(in) * 300 + 384
FOR an = 212 TO 812 STEP 100
COLOR in+1
line (xn,yn)-(an,bn)
NEXT an
FOR an = 84 TO 734 STEP 100
COLOR in+2
''Damit's langsam abläuft...
for tn =1 to 1000000
next tn
line (xn,yn)-(cn,an)
NEXT an
NEXT in
sleep
end 0 |
Bitte
Und wenn ich schonmal dabei bin, dann hab ich noch einen kleinen Ansatz für einen Bildschirmschone
Hier:
Code: | RANDOMIZE TIMER
''Nagelbrett
screen 20,8
dim as single xn,an,yn,bn,cn,in
dim as double tn
xn = 100
an = 384
yn = 100
bn = 384
cn = 512
' 500
DO
IN = IN + 0.31415/2
xn = SIN(in) * 300 + INT(RND*999)
yn = COS(in) * 300 + INT(RND*999)
FOR an = 212 TO 812 STEP 1
COLOR in+1+INT(RND*2)
line (xn,yn)-(an,bn)
NEXT an
FOR an = 84 TO 734 STEP 1
COLOR in+2+INT(RND*2)
''Damit's langsam abläuft...
line (xn,yn)-(cn,an)
NEXT an
LOOP
sleep
end 0 |
|
|
Nach oben |
|
 |
Grafixfan

Anmeldungsdatum: 24.03.2007 Beiträge: 17 Wohnort: Bayreuth
|
Verfasst am: 18.06.2007, 17:51 Titel: |
|
|
Danke für die codetags - ich bin noch am Üben!
Der Bildschirmschoner gefällt mir. Habe sowas schon mit mehreren Schleifen im Nagelbrett probiert; es kommt immer was Neues raus...
Gruß
Grafixfan |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|