2015-03-19 18 views
7

Ich versuche, meinen Schildkröten in jedem Mal, wenn sie schlüpfen, einen Farbbrüher zuzuweisen und die mittlere Farbe der Schildkröten in jeder Luke zu finden.Erstellen von Farbbrüher und Ermitteln des Durchschnittswerts

Ich hätte es leicht mit der Palettenerweiterung tun können, aber es wurde nicht für Netlogo 5.1 aktualisiert und daher verwende ich eine Gradientenerweiterung, die RGB-Farben ([ n n n]) als Eingabe und Ausgabe verwendet und als Ergebnis kann ich nicht finden das Mittel der Farben.

Dies ist der zugehörige Teil meines Code:

hatch 1 
[ set generation generation + 0.1 
    ifelse (tlake = "A") 
    [ set color gradient:scale [ [255 0 0 ] [255 255 0] [0 0 255] ] (generation) 0 500 ] 
    [ set color gradient:scale [ [255 0 0 ] [255 255 0] [0 0 255] ] (generation) 500 0 ]     
    set AVEA mean [color] of (turtles with [tlake = "A"]) 
    set AVEB mean [color] of (turtles with [tlake = "B"]) 
.... 
] 

Und das ist der Fehler Ich erhalte:

Can't find the mean of a list that contains non-numbers : [255 0 0] is a list. 

Wie eine Farbe Brauer erstellen oder den Mittelwert von RGB-Farbe erhalten Art?

+0

Gibt es auch nur eine einzige Definition von „bedeuten“ im Farbraum RGB hilft? Ich denke nicht, dass nur die Mittelung der Zahlen gute Ergebnisse bringen wird. siehe z.B. http://StackOverflow.com/Q/14819058/86485 –

+0

Sie sagen, Sie "hätten es leicht mit Pallet [e] Extension" getan. Wenn Sie zeigen, wie Sie es dort getan hätten - Sie können das in Kombination mit dem [Erweiterungsquellcode] (https://github.com/NetLogo/Palette-Extension/tree/master/src) verwenden, um herauszufinden, wie TU es. Hätten Sie einen Farbverlauf erstellt und dann die Farbe in der Mitte ausgewählt? –

+0

Wurde die Palettenerweiterung jetzt aktualisiert, und kann sie tatsächlich verwendet werden, um den Durchschnitt von zwei Farben zu nehmen, wie hier vorgeschlagen? – JenB

Antwort

1

Wie Seth in den Kommentaren darauf hingewiesen hat, ist es sehr kompliziert, den Durchschnitt von zwei Farben zu berechnen. Das heißt, das Mitteln jeder RGB-Komponente ist relativ einfach.

Die Brute-Force-Weg wäre, nur den Mittelwert jeder Komponente separat zu berechnen:

let r mean [ item 0 color ] of turtles 
let g mean [ item 1 color ] of turtles 
let b mean [ item 2 color ] of turtles 
let mean-color (list r g b) 

Wir diese sich ein wenig reinigen n-values unter Verwendung:

let mean-color n-values 3 [ mean [ item ? color ] of turtles ] 
+0

Ich denke, die wirkliche Lösung ist, über RYB zu gehen, wie empfohlen unter http://stackoverflow.com/questions/11312680/how-to-set-combined-color-for-overlapped-area-of-two-different-color -Objekte/11356035 # 11356035. Das bringt mehr Probleme, aber ist lebensfähig http://stackoverflow.com/questions/4945457/conversion-between-rgb-and-ryb-color-spaces – JenB

1

Mit mehr Arroganz als Sinn ist hier mein Versuch

Die Trivial

to-report mean-rgb [in] 
    report rgb (mean [item 0 color] of in) (mean [item 1 color] of in) (mean [item 2 color] of in) 
end 

Dieses Schema hat die Probleme y'all sprach über den Mittelwert von gelb und blau ist grau, aber es ist schnell und einfach.

Die Tangential

verwenden RGB Verwendung HSB nicht die Mittel sinnvoller sind. Obwohl es ein bisschen mühsamer ist.

to-report mean-color [in] report hsb (mean [item 0 to-hsb color] of in) (mean [item 1 to-hsb color] of in) (mean [item 2 to-hsb color] of in) 
end 

wo zu hsb ist a piece of code from an answer by Seth Tissue, die ich für Ihre Bequemlichkeit hier setzen wird.

to-report to-hsb [ rgb-color ] 
    if is-number? rgb-color [ set rgb-color extract-rgb rgb-color ] 
    let r item 0 rgb-color/255 
    let g item 1 rgb-color/255 
    let b item 2 rgb-color/255 
    let v max (list r g b) 
    let chroma v - (min (list r g b)) 
    let h 0 
    let s ifelse-value (v = 0) [ 0 ] [ chroma/v ] 

    if chroma > 0 [ 
      if v = r [ 
      set h ((g - b)/chroma) mod 6 
     ] 
     if v = g [ 
     set h (b - r)/chroma + 2 
    ] 
    if v = b [ 
    set h (r - g)/chroma + 4 
    ] 
    set h h/6 
] 
report map [ precision (? * 255) 3 ] (list h s v) 
end 

In diesem Schema ist der Mittelwert von Gelb und Blau Grün, Rot und Grün ist Amber. Natürlich gibt es einige Seltsamkeit der Mittelwert von rot, gelb und blau ist ein kränkliches grün

Ich hoffe, dass

+0

Danke dafür. Dies ist die nächste Absicht – JenB