Colors 从NetLogo中的RGB颜色获取HSB值

Colors 从NetLogo中的RGB颜色获取HSB值,colors,netlogo,Colors,Netlogo,NetLogo提供获取NetLogo颜色的hsb值的。但是,即使rgb列表是NetLogo中的合法颜色,它似乎对使用rgb列表指定的颜色不起作用。所以我的问题是,如何才能手动进行 顺便说一句,我已经向NetLogo添加了一个功能请求,以适当地扩展提取hsb:同意这个问题。同时,您可以通过传递列表来获得一种颜色,该颜色将处理: to-report extract-hsb-from [ c ] report ifelse-value (is-list? c) [ extract-hsb

NetLogo提供获取NetLogo颜色的hsb值的。但是,即使rgb列表是NetLogo中的合法颜色,它似乎对使用rgb列表指定的颜色不起作用。所以我的问题是,如何才能手动进行


顺便说一句,我已经向NetLogo添加了一个功能请求,以适当地扩展
提取hsb

同意这个问题。同时,您可以通过传递列表来获得一种颜色,该颜色将处理:

to-report extract-hsb-from [ c ]
  report ifelse-value (is-list? c)
    [ extract-hsb approximate-rgb (item 0 c) (item 1 c) (item 2 c) ]
    [ extract-hsb c ]
end

Edit:请参见下面的Seth评论,以获取更大的警告。)

这里是基于的
提取hsb的一个概括(请注意,V和B是相同的东西)

由于某种原因,它在除44以外的所有颜色数字上都能完美地匹配
提取hsb

observer> show filter [ (extract-hsb ?) != (to-hsb extract-rgb ?) ] (n-values 140 [ ? ])
observer: [44]
不幸的是,当从HSB转换时,NetLogo似乎会舍入RGB值(嗯,这实际上是有意义的)。这意味着您无法完成完美的HSB->RGB->HSB转换。例如,使用上述函数:

observer> show to-hsb hsb 30 64 128
observer: [30.547 63.75 128]

哦,好吧。

这有时会产生好的结果,有时会产生很差的结果,这取决于NetLogo的本机颜色空间中是否有接近输入颜色的颜色。
observer> show to-hsb hsb 30 64 128
observer: [30.547 63.75 128]