2015-03-19 11 views
7

Próbuję przypisać browarowi kolor do moich żółwi w 2 różnych pudełkach za każdym razem, gdy się wykluwają i znaleźć średni kolor żółwi w każdym kreskowaniu.Tworzenie browaru barwnikowego i uzyskiwanie jego średniej wartości

Mogłem łatwo zrobić to z rozszerzeniem palety, ale nie zostało zaktualizowane dla Netlogo 5.1 i dlatego używam rozszerzenia gradientowego, które używa kolorów RGB ([ n n n]) jako wejścia i wyjścia i w rezultacie nie mogę znaleźć średnia kolorów.

Jest to związane część mojego kodu:

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

I to jest błąd otrzymuję:

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

Jak stworzyć Brewer koloru lub uzyskać średnią wartość koloru RGB rodzaj?

+0

Czy istnieje jeszcze jedna definicja „myśli” w przestrzeni barw RGB? Nie sądzę, że uśrednienie liczb da dobre wyniki. patrz np. http://stackoverflow.com/q/14819058/86485 –

+0

Mówisz, że "mógłbyś z łatwością to zrobić z rozszerzeniem palety [e]". Jeśli pokażesz, jak byś to zrobił tam - możesz użyć go w połączeniu z [kodem źródłowym rozszerzenia] (https://github.com/NetLogo/Palette-Extension/tree/master/src), aby dowiedzieć się jak Zrób to. Czy stworzyłeś gradient, a następnie wybrałeś kolor w punkcie środkowym? –

+0

Czy rozszerzenie palety zostało zaktualizowane i czy może być użyte do zastosowania tutaj dwóch kolorów? – JenB

Odpowiedz

1

Jak zauważył Seth w komentarzach, to, co oznacza przyjęcie średniej z dwóch kolorów, jest skomplikowane. Mimo to uśrednianie każdego komponentu RGB jest stosunkowo proste.

Najbardziej brute force sposobem byłoby po prostu obliczyć średnią z każdego składnika oddzielnie:

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) 

Możemy to posprzątać trochę za pomocą n-values:

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

Myślę, że prawdziwym rozwiązaniem jest przejście przez RYB, takie jak zalecane na stronie http://stackoverflow.com/questions/11312680/how-to-set-combined-color-for-overlapped-area-of-twoo--different-color -objects/11356035 # 11356035. To wprowadza więcej problemów, ale jest wykonalne http://stackoverflow.com/questions/4945457/conversion-between-rgb-and-ryb-color-spaces – JenB

1

Przy większej arogancji niż sens tutaj jest moja próba

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 

Ten schemat ma problemy, z którymi rozmawialiście o średniej żółtej i niebieskiej, która jest szara, ale jest szybka i prosta.

styczny

nie używać użycie RGB HSB środki są bardziej znaczące. Chociaż jest nieco bardziej uciążliwy.

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 

gdzie-HSB jest a piece of code from an answer by Seth Tissue który położę tutaj dla wygody.

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 

W tym schemacie średnia żółtej i niebieskiej jest Zielona, ​​Czerwona i Zielona jest pomarańczowa. oczywiście jakiegoś dziwactwa średnią czerwony żółty i niebieski jest chorobliwie zielony

Mam nadzieję, że pomaga

+0

Dzięki za to. To jest najbliższe intencji – JenB

Powiązane problemy