  | 
					
						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, 10: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: 15.06.2007, 23: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, 16: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.
  | 
   
 
     |