Fehler in der Matrix
Übersicht BlitzBasic Beginners-Corner
gameworxBetreff: Fehler in der Matrix |
Do, Jul 22, 2010 21:03 Antworten mit Zitat |
|
---|---|---|
Warum zeigt mir die draw_matrix Funktion andere Punkte als die create_matrix Funktion? Die sollten doch eigentlich identisch sein.
Code: [AUSKLAPPEN] Graphics 640,480,32,0 SeedRnd MilliSecs() Const x_tiles = 3 Const y_tiles = 3 Const zuf = 20 Dim x_dot (x_tiles) Dim y_dot (y_tiles) create_matrix() ;*** MAIN LOOP *** SetBuffer BackBuffer() While Not KeyDown (1) ClsColor 255,255,255 : Cls draw_matrix() Flip Wend End ;*** END OF MAIN LOOP *** Function create_matrix() x_size = Int(GraphicsWidth() / x_tiles) ; average tile size x y_size = Int(GraphicsHeight() / y_tiles) ; average tile size y For y = 0 To y_tiles For x = 0 To x_tiles deg = Rand(0,359) x_dot(x) = x * x_size + zuf * Cos(deg) y_dot(y) = y * y_size + zuf * Sin(deg) If x = 0 Then x_dot(x) = 0 If y = 0 Then y_dot(y) = 0 If x = x_tiles Then x_dot(x) = GraphicsWidth()-1 If y = y_tiles Then y_dot(y) = GraphicsHeight()-1 Oval x_dot(x)-4, y_dot(y)-4,8,8,1 Next Next WaitKey() End Function Function draw_matrix() For y = 0 To y_tiles For x = 0 To x_tiles Color 255,0,0 Oval x_dot(x)-4, y_dot(y)-4,8,8,1 Next Next End Function |
||
Fobsi |
Do, Jul 22, 2010 21:22 Antworten mit Zitat |
|
---|---|---|
baut zuerst Y dann X
Code: [AUSKLAPPEN] For y = 0 To y_tiles
For x = 0 To x_tiles genau umgekehrt mach einfach beide gleich. Code: [AUSKLAPPEN] For y = 0 To x_tiles
For x = 0 To y_tiles lg F. |
||
gameworx |
Do, Jul 22, 2010 22:01 Antworten mit Zitat |
|
---|---|---|
Erstmal danke für den Vorschlag.
Irgendwas mache ich wohl falsch. Ich habe mein Programm deinem Vorschlag entsprechend geändert: - erst nur in der create_matrix Funktion - dann in beiden Funktionen - und zum Schluß nur in der draw_matrix Funktion Der Fehler blieb bei allen 3 Versuchen bestehen, was eigentlich auch klar ist, da die Konstanten "x_tiles" und "y_tiles" beide mit "3" deklariert wurden. Wenn ich die Konstante Zuf auf 0 setze, dann sind zwar alle Punkte identisch, haben aber nicht mehr die gewünschte Varianz. |
||
Fobsi |
Do, Jul 22, 2010 22:22 Antworten mit Zitat |
|
---|---|---|
vieleicht hilft dier das weiter:
es liegt an Code: [AUSKLAPPEN] deg = Rand(0,359)
BlitzBasic: [AUSKLAPPEN] Graphics 640,480,32,0 |
||
gameworx |
Do, Jul 22, 2010 23:06 Antworten mit Zitat |
|
---|---|---|
Nicht ganz. Jetzt sind zwar die Punkte gleich, aber dein Vorschlag entspricht im Grunde meiner Anmerkung:
gameworx hat Folgendes geschrieben: Wenn ich die Konstante Zuf auf 0 setze, dann sind zwar alle Punkte identisch, haben aber nicht mehr die gewünschte Varianz.
Das Ergebnis ist das Gleiche. Mein Ziel ist aber folgendes: Die grauen Punkte haben normalerweise bedingt durch x_tiles/ y_tiles konstante Abstände. Ich möchte aber, dass alle Punkte, welche nicht am Bildschirmrand liegen (rote Punkte), innerhalb eines Radius (grüne Kreise) abweichen können bzw. die Punkte am Bildschirmrand, welche keine Eckpunkte sind ein wenig Spielraum in der horizontalen oder Vertikalen haben. |
||
XeresModerator |
Do, Jul 22, 2010 23:09 Antworten mit Zitat |
|
---|---|---|
Das sollte dir sagen, dass das Problem ist, dass du y mehrfach andere Werte zuordnest, da Zufall+Schleife | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
gameworx |
Do, Jul 22, 2010 23:15 Antworten mit Zitat |
|
---|---|---|
ja, ja, jaaaaaaaaaaa, da dämmert mir was.
Danke für den Tip. |
||
gameworx |
Fr, Jul 23, 2010 8:32 Antworten mit Zitat |
|
---|---|---|
Ok, Problem gelöst. Ich habe die beiden Arrays x_tiles und y_tiles jetzt zweidimensional angelegt
Dim x_dot (x_tiles, y_tiles) Dim y_dot (x_tiles, y_tiles) Klappt jetzt wunderbar. Vielen Dank an Xeres. Thread kann geschlossen werden. |
||
XeresModerator |
Fr, Jul 23, 2010 13:20 Antworten mit Zitat |
|
---|---|---|
Ähm... wie meinen?
Du benutzt die doppelte Menge der Ursprünglichen Punkte - ist das Sinn der Sache? Ich hätte das 2D Array so erstellt, das alle Werte nur einmal eingetragen werden... |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
gameworx |
Fr, Jul 23, 2010 13:45 Antworten mit Zitat |
|
---|---|---|
War wohl mal wieder eine richte Kackn00b Aktion von mir, aber die Freude über das Ergebnis verdrängte die Zweifel am unsauberen Code...
Ich seh es mir wohl doch nochmal an. In einem 2D Array alle Werte nur 1x eintragen. Du meinst, ich soll die x und y Bildschirmkoordinaten in der Variable dot(x,y) speichern? Als String z.B.? EDIT: Habe jetzt einen Array Dim dot$ (x_tiles, y_tiles) definiert, in dem ich die X- und Y-Koordinaten mit einem Komma getrennt als String speichere. War auch nicht wirklich schwer und funktionert. |
||
das wurgel |
Di, Jul 27, 2010 2:48 Antworten mit Zitat |
|
---|---|---|
An deiner Stelle würde ich das mit den Strings lassen: Es ist langsamer und umständlich. Was Xeres meinte ist nur, dass du die eine mehrfache Anzahl an Punkten speicherst, als du vorher gespeicherst hast. Vorher hattest du jeweils 4 X-Koords und 4 Y. Das sind garade mal 4 Punkte. Das war, wie du selbst erkannt hast falsch, nun hast du 4*4 X-Koords und 4*4 Y. Also 16 Punkte, die zweidimensional verwaltet werden. Man kann sie natürlch auch wie Xeres sagte eindimensional speichern - das kommt aufs Selbe raus, nur ist es 2D einfacher, da du sie so über ihre Reihe und Spalte ansprechen kannst. | ||
1 ist ungefähr 3 |
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group