Colors 创建彩色啤酒厂并获取其平均值

Colors 创建彩色啤酒厂并获取其平均值,colors,gradient,netlogo,Colors,Gradient,Netlogo,每次海龟孵化时,我都会在两个不同的盒子里给它们分配一个颜色酿酒师,并找出每个孵化中海龟的平均颜色 我可以很容易地用托盘扩展完成它,但是它没有为Netlogo 5.1更新,因此,我使用的渐变扩展使用RGB颜色([n])作为输入和输出,因此,我找不到颜色的平均值 这是我的代码的相关部分: hatch 1 [ set generation generation + 0.1 ifelse ( tlake = "A" ) [ set color gradient:scale [ [255

每次海龟孵化时,我都会在两个不同的盒子里给它们分配一个颜色酿酒师,并找出每个孵化中海龟的平均颜色

我可以很容易地用托盘扩展完成它,但是它没有为Netlogo 5.1更新,因此,我使用的渐变扩展使用RGB颜色
([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颜色类型的平均值?

正如赛斯在评论中指出的那样,两种颜色的平均值到底意味着什么是复杂的。也就是说,平均每个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 ]

这是我的尝试,傲慢多于理智

琐碎的事

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
这个方案有你们都提到的问题,黄色和蓝色的平均值是灰色的,但它快速简单

切向的

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
去hsb的路在哪里?为了您的方便,我会把它放在这里

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
在该方案中,黄色和蓝色的平均值为绿色,红色和绿色的平均值为琥珀色。 当然也有一些奇怪——红、黄、蓝的平均值是病态的绿色


我希望这会有所帮助

RGB颜色空间中是否有“平均值”的单一定义?我不认为仅仅平均这些数字就能得到好的结果。请参阅,例如,您说您“可以很容易地使用托盘[e]扩展来完成”。若你们展示了你们在那个里是怎么做的,你们可以把它和你们的工作结合起来,找出如何去做。你会创建一个渐变,然后在中间点选择颜色吗?调色板扩展现在已经更新了吗?它是否真的可以按照这里的建议用于取两种颜色的平均值?我认为真正的解决方案是通过RYB,如推荐的在。这会带来更多问题,但也是可行的