【问题标题】:Sorting items by their Color按颜色对项目进行排序
【发布时间】:2011-01-30 06:23:17
【问题描述】:

我有一篮鲜花,我希望它们按颜色进行标记和分类。任何关于如何做到这一点的想法都会非常有帮助。

非常感谢您的宝贵时间。

【问题讨论】:

  • 我喜欢这个问题。滚滚。请提供更多详细信息。
  • @normalone:您目前如何表示您购物篮中的内容? “标签”是什么意思? “种类”?您真的是指“组”而不是“排序”吗?如果不是,您如何订购颜色,通常由三元组数字指定,例如(红、绿、蓝)?是红色>蓝色,还是红色
  • @John Machin 如果你有 rgb/hex 值,实际上很容易将颜色从光谱的一端排序到另一端。
  • 我相信颜色的顺序是这样的:ROYGBIV
  • @Endophage, @Scott M.:您说的是具有单一波长的颜色。 CSS 等中使用的 RGB 颜色包含许多混合了多种波长的颜色。

标签: algorithm sorting


【解决方案1】:

最明显的解决方案似乎是按色调排序。

这将为您提供一个稳定的排序比较运算符,它将按以下顺序对您的数组进行排序:

请注意,某些 RGB 颜色是退化的,因为它们没有单一的 HLS 形式。白色就是这样一个例子。如何处理它们取决于您。

【讨论】:

  • +1 实际回答问题(尽管是盲人?)
  • 如果两种颜色的色调相同,还要为“饱和度”添加一个垂直刻度。
【解决方案2】:

您可以使用 Lexicographic ordering 的概念来做到这一点。

基本上,给定 2 种颜色的 HSL 表示(例如 C1 = (H1, S1, L1)C2 = (H2, S2, L2)),我们可以定义 C1 < C2 当且仅当 ((H1 < H2) || (H1 == H2 && S1 < S2) || (H1 == H2 && S1 == S2 && L1 < L2))C1 == C2 当且仅当 H1 == H2 && S1 == S2 && L1 == L2C1>C2 也是如此。

这将首先按色调排序颜色;然后通过饱和度来解决色相冲突;最后通过亮度来解决色相和饱和度的冲突。

我在本例中使用了优先顺序 H > S > L,但您也可以根据需要轻松使用其他顺序,甚至可以使用其他颜色表示(例如 RGB)。

【讨论】:

    【解决方案3】:

    如果您想按实际颜色排序,而不是按颜色名称的字母顺序,那么解决方案不是很明显。排序通常在可以定义明确的“大于”和“小于”语义的实体上进行。但是,颜色没有这样的语义,因为它们通常由 3 个数字表示(RGB 或 HSV)。您必须任意定义自己的“排序”,然后使用它进行排序。

    【讨论】:

    • 这在某种程度上是正确的。但是我敢打赌,对于一组“无序”颜色与一组“有序”颜色的外观,您会有一些直观的感觉。问题是如何在代码中捕获它。
    • 我的第一个想法是按色调排序,就像 Blindy 的回答一样。但是当我按照这个想法进行时,我遇到了各种各样的问题。高度去饱和的颜色呢?您将如何对 和 进行排序?您可以按色调排序,然后是饱和度,然后是值。或者红色,然后绿色,然后蓝色。这就是我在回答中的意思。
    【解决方案4】:

    你可以在java中比较颜色见this

    【讨论】:

    • 这是比较相等,而不是比较大/小。
    【解决方案5】:

    您可以尝试获取方差的主成分,然后在该轴上进行投影。 (因此,如果所有颜色都是红色,红色是非零,绿色和蓝色都是零,算法会说轴是 1.0、0.0、0.0。然后它按红色排序。如果它们都是黄色,那么该轴是根(0.5),根(0.5),0.0,它平均红色和绿色,并对其进行排序)。 如果颜色形成三个或更多不同的“云”,则效果不佳。

    【讨论】:

      猜你喜欢
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 2014-07-04
      • 2012-03-10
      • 1970-01-01
      相关资源
      最近更新 更多