【问题标题】:Sort RGB list of colors by least distance按最小距离对颜色的 RGB 列表进行排序
【发布时间】:2016-11-06 18:47:06
【问题描述】:

我希望按最小距离对 RGB 颜色列表进行排序,希望这会比 Luminosity 和 HSV 提供更好的排序。我正在使用距离公式来计算颜色的距离,但是如何根据最小距离对列表进行排序?

【问题讨论】:

  • 你用什么结构保存颜色?一个数组?
  • 您将定义一个比较器,并将其与Collections.sort 一起使用。
  • “最短距离”是什么意思?与什么距离最短?为了对某些东西进行排序,您必须有一个绝对比例来放置每个值,并且关系必须满足基本的排序要求,例如传递性。如果你没有这个,你就不能一致地排序。
  • 完全不清楚您要做什么。正如其他人问的那样,“与什么的距离最短?”您要解决的真正问题是什么?

标签: java algorithm sorting colors rgb


【解决方案1】:

有几种方法可以做到这一点,您可以使用@yshavit 建议的比较器。

我要做的是创建一个新类并分配一个颜色类型和一个比较值 double,创建一个新数组,然后根据它们的 double 值对颜色进行排序(最小的优先等),然后再次提取颜色。

【讨论】:

    【解决方案2】:

    暂时忘记您已经获得了颜色,而只需考虑 3D(或 2D)空间中的点。

    您不能简单地按距离“排序”点。您可以按到某个指定点 X 的距离对它们进行排序,但这可能不是您想要的。

    相反,您可能正在寻找的是对点进行排序,以最小化通过它们的路径的总长度。这本质上是旅行商问题,它的计算量很多比仅仅排序列表要多。

    理想情况下,您希望使用感知上正确的距离函数来执行此距离计算 - 这通常意味着将您的点转换为实验室空间并使用其中一种标准。

    【讨论】: