创建颜色酿造器并获得其平均值

时间:2015-03-19 16:31:20

标签: colors gradient netlogo

我试图在每次孵化时在两个不同的盒子中为我的海龟分配一个颜色酿酒师,并找到每个孵化中海龟的平均颜色。

我可以轻松地使用托盘扩展来完成它,但它没有针对Netlogo 5.1进行更新,因此,我使用渐变扩展,使用RGB颜色([ n n n])作为输入和输出,并作为结果,我找不到颜色的意思。

这是我的代码的相关部分:

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

这是我得到的错误:

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

如何创建颜色冲泡器或获取rgb颜色类型的平均值?

2 个答案:

答案 0 :(得分:1)

正如Seth在评论中指出的那样,采用两种颜色的平均值意味着什么是复杂的。也就是说,平均每个RGB组件相对简单。

最蛮力的方法是分别计算每个组件的平均值:

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)

我们可以使用n-values

清理一下
let mean-color n-values 3 [ mean [ item ? color ] of turtles ]

答案 1 :(得分:1)

这里有更多的傲慢而不是感觉是我的尝试

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

这个方案有问题你们都谈到黄色和蓝色的平均值是灰色的,但它快速而简单。

切线

不使用RGB使用HSB的手段更有意义。虽然它有点麻烦。

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

to-hsb是a piece of code from an answer by Seth Tissue,我将放在这里以方便您使用。

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

在这个方案中,黄色和蓝色的平均值是绿色,红色和绿色是琥珀色。 当然有些奇怪的是,红黄色和蓝色的意思是病态的绿色

我希望有帮助