Dim-Feld und verschachtelte Schleife

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Flush

Betreff: Dim-Feld und verschachtelte Schleife

BeitragSa, Mai 19, 2018 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,
ich habe ein ziemlich simples Problem aber es klappt einfach nicht.
Ich möchte 7 gleichlange Linien zeichnen. Diesen Linien möchte ich Farbwerte aus einem zweidimensionalen Dim-Feld mittels verschachtelter Schleife zuweisen aber es klappt einfach nicht Sad !

Obwohl die äußere Schleife von 0 bis 6 geht werden 8 Linien gezeichnet und alle bleiben weiß d.h. ohne Farbe!

Könnt Ihr mir da weiterhelfen Very Happy ?

BlitzBasic: [AUSKLAPPEN]

Graphics 800, 600, 24, 3


Dim AxisColor(6, 2)

AxisColor(0, 0) = 0
AxisColor(0, 1) = 100
AxisColor(0, 2) = 0

AxisColor(1, 0) = 0
AxisColor(1, 1) = 200
AxisColor(1, 2) = 0

AxisColor(2, 0) = 0
AxisColor(2, 1) = 250
AxisColor(2, 2) = 0

AxisColor(3, 0) = 255
AxisColor(3, 1) = 255
AxisColor(3, 2) = 255

AxisColor(4, 0) = 0
AxisColor(4, 1) = 250
AxisColor(4, 2) = 0

AxisColor(5, 0) = 0
AxisColor(5, 1) = 200
AxisColor(5, 2) = 0

AxisColor(6, 0) = 0
AxisColor(6, 1) = 100
AxisColor(6, 2) = 0


For StartX = 0 To 6
For IndexRow% = 0 To 2
For IndexColumn% = 0 To 1
Color AxisColor(IndexRow,IndexColumn), AxisColor(IndexRow,IndexColumn), AxisColor(IndexRow,IndexColumn)
EndX = StartX
Line StartX, 0, EndX, 280
; Color AxisColor(0,0), AxisColor(0,1), AxisColor(0,2)
; DebugLog AxisColor(IndexRow,IndexColumn)
Next
Next
Next


WaitMouse()


Viele Grüße, schöne Pfingsten Cool und danke für Eure Hilfe,
Flush

Xeres

Moderator

BeitragSa, Mai 19, 2018 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde an deiner Stelle mal mit print statements ausgeben, welche Werte du da in den Schleifen eigentlich erzeugst.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragSa, Mai 19, 2018 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ja klar das hab ich schon gemacht. IndexRow 0 1 2 und IndexColumn 1 1 1.
Ich weiß dass es falsch ist. ich hab schon zig Kombinationen durch aber ich komm nicht auf das richtige Ergebnis!

Eine funktionierende Farbzuweisung müsste so aussehen:BlitzBasic: [AUSKLAPPEN]
Color AxisColor(0,0), AxisColor(0,1), AxisColor(0,2)


Wenn ich hiermit die Werte auslese sieht es für mich sogar so aus als wär alles richtig???

BlitzBasic: [AUSKLAPPEN]

For X%=0 To 2
For Y%=0 To 2
Print "X="+x+",Y="+y+" Ergebniss:"+AxisColor(x,y)
Next
Next




Viele Grüße,
Flush
  • Zuletzt bearbeitet von Flush am Sa, Mai 19, 2018 19:44, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragSa, Mai 19, 2018 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn dir das Problem nicht klar ist, hast du's wohl noch nicht lange genug gemacht.

Ich meinte auch nicht, einfach die Indizies ausgeben, sondern was für Befehle du damit tatsächlich generierst.

BlitzBasic: [AUSKLAPPEN]
Print "Color AxisColor("+IndexRow+","+IndexColumn+"), AxisColor("+IndexRow+","+IndexColumn+"), AxisColor("+IndexRow+","+IndexColumn+")"
Print "Color "+AxisColor(IndexRow,IndexColumn)+", "+AxisColor(IndexRow,IndexColumn)+", "+AxisColor(IndexRow,IndexColumn)


Code kann kompliziert sein, manchmal muss man da lange drauf starren, bis der Groschen fällt.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragSa, Mai 19, 2018 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Meine Ausgabe sieht so aus:

    X=0,Y=0 Ergebnisse: 0
    X=0,Y=1 Ergebnisse: 100
    X=0,Y=2 Ergebnisse: 0
    X=1,Y=0 Ergebnisse: 0
    X=1,Y=1 Ergebnisse: 200
    X=1,Y=2 Ergebnisse: 0
    X=2,Y=0 Ergebnisse: 0
    X=2,Y=1 Ergebnisse: 250
    X=2,Y=2 Ergebnisse: 0


Viele Grüße und vielen Dank,
Flush

P.S.: Ups da warst Du schneller Xeres!

Xeres

Moderator

BeitragSa, Mai 19, 2018 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Denke dir keinen Code zum debuggen aus - debugge den Code, den du auch benutzt.
Du hast da 3(!) Schleifen oben in deinem Eingangspost.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragSa, Mai 19, 2018 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt,
ich hab Deine Zeilen eingepflegt!

Das ganze von mir gebaute for....next Gerüst ist irgendwie völlig falsch!

BlitzBasic: [AUSKLAPPEN]

For StartX = 0 To 6
For IndexRow% = 0 To 2
For IndexColumn% = 0 To 1
Color AxisColor(IndexRow,IndexColumn), AxisColor(IndexRow,IndexColumn), AxisColor(IndexRow,IndexColumn)
Print "Color AxisColor("+IndexRow+","+IndexColumn+"), AxisColor("+IndexRow+","+IndexColumn+"), AxisColor("+IndexRow+","+IndexColumn+")"
Print "Color "+AxisColor(IndexRow,IndexColumn)+", "+AxisColor(IndexRow,IndexColumn)+", "+AxisColor(IndexRow,IndexColumn)
Next
Next
Next



Die 1. Schleife brauche ich um durch die Anzahl der Linien zu iterieren die 2. für die Zeilen und Spalten des 2 dimensionalen Array.
Die verschachtelung klappt nicht, aber wie muss ich das denn machen, ich brauche doch alle 3 Schleifen!?

Wenn ich die Ausgabe verschiebe dann habe ich natürlich 7 Linien aber der nur die Farbe des letzten Array Eintrages (3, 2) nämlich 255, 255, 255 also weiß, das ist auch logisch aber wie mach ichs richtig?

BlitzBasic: [AUSKLAPPEN]

For StartX = 0 To 6
For IndexRow% = 0 To 2
For IndexColumn% = 0 To 1
Color AxisColor(IndexRow,IndexColumn), AxisColor(IndexRow,IndexColumn), AxisColor(IndexRow,IndexColumn)
Next
Next
Print "Color AxisColor("+IndexRow+","+IndexColumn+"), AxisColor("+IndexRow+","+IndexColumn+"), AxisColor("+IndexRow+","+IndexColumn+")"
Print "Color "+AxisColor(IndexRow,IndexColumn)+", "+AxisColor(IndexRow,IndexColumn)+", "+AxisColor(IndexRow,IndexColumn)
Next


Viele Grüße,
Flush

Flush

BeitragSa, Mai 19, 2018 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe jetzt lange genug drauf gestarrt und rumprobiert.
Ich seh den Wald halt vor lauter Bäumen einfach nicht! Embarassed

Kennt keiner die Lösung?


Vielen Dank und viele Grüße,
Flush

Xeres

Moderator

BeitragSa, Mai 19, 2018 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann schon mal ein Hinweis: Wie willst du auf diese Weise mit Color jemals alle Farbkomponenten gleichzeitig setzen?
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragSa, Mai 19, 2018 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Wie willst du auf diese Weise mit Color jemals alle Farbkomponenten gleichzeitig setzen?


AhhhhrrggHHH, es stimmt mit den Werten R, G, B nicht aber es sind doch 3 Rows?
Oder meinst Du was anderes?
Oder ist der Ansatz schon völlig falsch?
Oder steckt der Teufel im Detail und ich dreh mich um die eigene Achse?

Mensch Xeres wenn Du so weiter machst dann wird das zur Schnitzlejagd Wink .
Hinweise sind in Adventures gut aber wenn jemand in einer Sackgasse ist dann....verwirrt das nur noch mehr Confused !

Wenn ich das Problem so angehe funktioniert das natürlich aber das ist halt sehr unelegant!

BlitzBasic: [AUSKLAPPEN]

Color 0, 100, 0
Line 0, 0, 0, 280

Color 0, 200, 0
Line 1, 0, 1, 280

Color 0, 250, 0
Line 2, 0, 2, 280

Color 255, 255, 255
Line 3, 0, 3, 280

Color 0, 250, 0
Line 4, 0, 4, 280

Color 0, 200, 0
Line 5, 0, 5, 280

Color 0, 100, 0
Line 6, 0, 6, 280



Vielen Dank und viele Grüße,
Flush

SpionAtom

Betreff: Sorry fürs Vorkauen

BeitragSa, Mai 19, 2018 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Data 7
Data 0, 100, 0
Data 0, 200, 0
Data 0, 250, 0
Data 255, 255, 255
Data 0, 250, 0
Data 0, 200, 0
Data 0, 100, 0

Restore
Read lines

   width = GraphicsWidth() / lines
   For n = 0 To lines - 1
      Read r, g, b
      Color r, g, b
      Rect n * width, 0, width, GraphicsHeight()
   Next
   
WaitKey
End


Zwei Tipps noch:
Wenn sich das Farbmuster immer spiegelt, dann kannst du die Hälfte der Daten einsparen.
Wenn du noch senkrechte oder wagerechte Linien verwendest, dann nimm Rect, das ist schneller.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
  • Zuletzt bearbeitet von SpionAtom am Sa, Mai 19, 2018 21:13, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragSa, Mai 19, 2018 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Statt Arrays Data-Blöcke zu benutzen ist keine Lösung des eigentlichen Problems.

Wenn du die Farben so in Arrays definierst..
Code: [AUSKLAPPEN]
AxisColor(0, 0) = 0
AxisColor(0, 1) = 100
AxisColor(0, 2) = 0


...dann musst du auch RGB gleichzeitig in Color setzen:
Code: [AUSKLAPPEN]
Color AxisColor(LineNumber, 0), AxisColor(LineNumber, 1), AxisColor(LineNumber, 2)

Sonst setzt du RGB ja immer zu dem letzten Wert in dem Array.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Flush

BeitragSa, Mai 19, 2018 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
@SpionAtom
Vielen Dank für die Antwort Very Happy . Vorkauen ist nicht falsch nur dann wenn man sich mit dem Ergebnis nicht beschäftigt Exclamation

Zitat:
Sage es mir, und ich werde es vergessen. Zeige es mir, und ich werde es vielleicht behalten. Lass es mich tun, und ich werde es können.

Konfuzius, *551 v. Chr. †479 v. Chr.
Chinesicher Philosoph


Jetzt kann ich es tun und daraus lernen ==> es können Idea !

War also mein Ansatz mit den verschachtelten Schleifen völlig falsch oder kann so ein Sachverhalt auch mit verschachtelten Schleifen gelöst werden?

Ich war schon wieder nicht schnell genug, vielen Dank für Deine Antwort Xeres!

Viele Grüße und vielen Dank nochmal,
Flush

Flush

BeitragSa, Mai 19, 2018 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
@Xeres
Zitat:
Statt Arrays Data-Blöcke zu benutzen ist keine Lösung des eigentlichen Problems.

Stimmt!.

Zitat:
...Wenn du die Farben so in Arrays definierst.


Hmmm das leuchtet ein.
Wenn Du den Sachverhalt mit Arrays und verschachtelten Schleifen lösen wolltest/ müsstest, wie würde das bei Dir dann komplett aussehen?
3-4 Zeilen könnten den Knoten für immer lösen ==> keine unnötigen Fragen!
Das wäre sehr gut, denn Problemstellungen wie diese treten sehr häufig auf!

Nach Deiner letzten Antwort meinst Du das so?

BlitzBasic: [AUSKLAPPEN]

Global LineNumber = 6
For StartX = 0 To LineNumber
Color AxisColor(LineNumber,0), AxisColor(LineNumber,1), AxisColor(LineNumber,2)
EndX = StartX
Line StartX, 0, EndX, 280
Next


Das kann aber auch nicht funktionieren denn auf diese Weise werden 7 Linien in einer Farbe gezeichnet.
Da aber 7 Linien in verschiedenen Farben benötigt werden werden verschachtelete Schleifen benötigt und im wie diese richtig gebaut werden, liegt der Hund begraben!

Viele Grüße und vielen Dank vorab,
Flush
  • Zuletzt bearbeitet von Flush am Sa, Mai 19, 2018 21:28, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragSa, Mai 19, 2018 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Du verschachtelst zu tief. Dein Array hat zwei Dimensionen, benenn sie nach dem was sie beinhalten, nicht row und column, vielleicht fällt dir dann auf wo der Fehler liegt.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Jolinah

BeitragSa, Mai 19, 2018 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier noch ein paar Hinweise Wink

Arrow So lange die Linien alle gleich lang sein sollen und untereinander, dann reicht 1 Schleife völlig (0 - 6 für die Linien).
Arrow Du willst pro Linie 1x die Farbe setzen, nur besteht die Farbe aus 3 Komponenten. Dafür brauchst du keine Schleife, sondern kannst die Farb-Komponenten ja direkt mit 0, 1 und 2 ansteuern im Array.
Arrow Das y für jede Linie lässt sich berechnen. Der einfachste Fall ist den Zeilen-Index zu verwenden (und allenfalls ein paar Pixel dazu zu addieren, damit die Linie nicht ganz oben am Fensterrand gezeichnet wird, z.B. ZeilenIndex + 10).
Arrow X-Start und -Ende würde ich erstmal statisch machen, z.B. Start bei 10 und Ende bei 110.
Arrow Der letzte Parameter von Graphics würde ich von 3 zu 2 ändern. In meinem Fall wurde das Fenster so runter skaliert, dass man die 1px breiten Linien gar nicht sehen konnte, obwohl sie eigentlich gezeichnet wurden.

Flush

BeitragSa, Mai 19, 2018 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
@Blade Runner & Jolinah
Hmmm, ich mach!

@Jolinah
Die Linien sollen nebeneinander gezeichnet werden Wink


Ich hab jetzt alles so geändert auch die Farben (zum besseren Erkennen):
BlitzBasic: [AUSKLAPPEN]

Graphics 800, 600, 24, 3

Dim AxisColor(6, 2)

AxisColor(0, 0) = 255
AxisColor(0, 1) = 0
AxisColor(0, 2) = 0

AxisColor(1, 0) = 0
AxisColor(1, 1) = 255
AxisColor(1, 2) = 0

AxisColor(2, 0) = 0
AxisColor(2, 1) = 0
AxisColor(2, 2) = 255

AxisColor(3, 0) = 255
AxisColor(3, 1) = 255
AxisColor(3, 2) = 255

AxisColor(4, 0) = 0
AxisColor(4, 1) = 0
AxisColor(4, 2) = 255

AxisColor(5, 0) = 0
AxisColor(5, 1) = 255
AxisColor(5, 2) = 0

AxisColor(6, 0) = 255
AxisColor(6, 1) = 0
AxisColor(6, 2) = 0

For Index = 0 To 2
Color AxisColor(Index,0), AxisColor(Index,1), AxisColor(Index,2)
Line 100 + Index, 0, 100 + Index, 280
Next



Es sieht so aus als würde es klappen Very Happy ! Oh Mann hab ich kompliziert gedacht Embarassed


Viele Grüße und Vieeelen Dank für Eure Antworten,
Flush
  • Zuletzt bearbeitet von Flush am Sa, Mai 19, 2018 22:06, insgesamt 2-mal bearbeitet

Jolinah

BeitragSa, Mai 19, 2018 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch da geht es mit einer einzigen Schleife. Selbst wenn die Linien nicht gleich lang wären, könnte man die Länge pro Linie gleich wie die Farben im Array mitspeichern Wink

Edit: Ich dachte du wolltest 7 Linien zeichen? Im geänderten Code zeichnest du ja jetzt nur 3 von oben nach unten, aber das Array hat immer noch eine grösse von 7?

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group