2015-03-19 23 views
7

Sto provando ad assegnare un coloratore alle mie tartarughe in 2 scatole diverse ogni volta che si schiudono e trovano il colore medio delle tartarughe in ogni boccaporto.Creazione di un creatore di colori e ottenimento del suo valore medio

Avrei potuto facilmente farlo con l'estensione pallet ma non è stato aggiornato per Netlogo 5.1 e quindi, sto usando un'estensione gradiente che utilizza i colori RGB ([ n n n]) come input e output e come risultato, non riesco a trovare il mezzo dei colori

Questa è la parte relativa del mio codice:

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"]) 
.... 
] 

E questo è l'errore che sto ottenendo:

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

Come creare un birraio di colore o di ottenere il valore medio del colore rgb genere?

+0

C'è anche una sola definizione di "significare" nello spazio colore RGB? Non penso che solo la media dei numeri darà buoni risultati. vedere per es. http://stackoverflow.com/q/14819058/86485 –

+0

Dici che "potresti averlo fatto facilmente con l'estensione Pallet [e]". Se mostri come lo avresti fatto lì - puoi usarlo in combinazione con il [codice sorgente dell'estensione] (https://github.com/NetLogo/Palette-Extension/tree/master/src) per capire come fallo. Avresti creato una sfumatura, quindi hai selezionato il colore nel punto medio? –

+0

L'estensione della tavolozza ora è stata aggiornata e può effettivamente essere utilizzata per prendere la media di due colori come suggerito qui? – JenB

risposta

1

Come ha sottolineato Seth nei commenti, è esattamente il significato di prendere la media di due colori. Detto questo, la media di ciascun componente RGB è relativamente semplice.

Il modo forza più bruta sarebbe calcolare solo la media di ogni componente separatamente:

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) 

possiamo pulire questo in su un po 'utilizzando n-values:

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

Penso che la vera soluzione sia quella di passare tramite RYB come consigliato all'indirizzo http://stackoverflow.com/questions/11312680/how-to-set-combined-color-for-overlapped-area-of-two-different-color -Oggetti/11356035 # 11356035. Questo introduce più problemi, ma è valido http://stackoverflow.com/questions/4945457/conversion-between-rgb-and-ryb-color-spaces – JenB

1

Con arroganza di il senso è il mio tentativo

The 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 

questo schema ha i problemi di cui hai parlato sulla media del giallo e il blu è grigio ma è veloce e semplice.

La tangenziale

non utilizzare uso RGB HSB i mezzi sono più significativi. Anche se è un po 'più ingombrante.

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 

dove-HSB è a piece of code from an answer by Seth Tissue cui mi metterò qui per la vostra convenienza.

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 questo schema la media di Giallo e Blu è Verde, Rosso e Verde è Ambra. Naturalmente c'è qualche stranezza la media di colore giallo rosso e blu è un malaticcio verde

Mi auguro che aiuta

+0

Grazie per questo. Questo è il più vicino nell'intento – JenB