我有一篮子鲜花,我希望他们按照颜色进行标记和排序。关于如何做到这一点的任何想法都将非常有用。
非常感谢你的时间。
答案 0 :(得分:5)
最明显的解决方案似乎是按顺序排序。
这将为您提供一个稳定的排序比较运算符,它将按此顺序对数组进行排序:
请注意,某些RGB颜色是退化的,因为它们没有单一的HLS表单。怀特就是这样一个例子。这取决于你如何处理它们。
答案 1 :(得分:1)
您可以尝试获取方差的主要成分,然后在该轴上投影。 (因此,如果所有颜色都是红色,红色是非零,绿色和蓝色都是零,算法会说轴是1.0,0.0,0.0。然后它按红色排序。如果它们都是阴影黄色,然后该轴是根(0.5),根(0.5),0.0,它平均红色和绿色,并对其进行排序)。 如果颜色形成三个或更多不同的“云”,它将无法正常工作。
答案 2 :(得分:0)
如果您想按实际颜色对其进行排序,而不是按颜色名称按字母顺序排序,则解决方案不是很明显。排序通常在可以定义明确的“大于”和“小于”语义的实体上完成。但是,颜色没有这样的语义,因为它们通常由3个数字(RGB或HSV)表示。您必须随意定义自己的“排序”,然后使用它进行排序。
答案 3 :(得分:0)
您可以使用 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))
和{{1} }且仅当C1 == C2
时。同样适用于H1 == H2 && S1 == S2 && L1 == L2
。
这将首先按色调排序颜色;然后通过饱和来解决色调冲突;最后通过轻盈来解决色调和饱和度冲突。
我在这个例子中使用了优先顺序C1>C2
,但您可以根据需要轻松使用其他顺序,或者甚至可以使用其他颜色表示(例如RGB)。
答案 4 :(得分:0)
您可以比较java中的颜色,请参阅this