【发布时间】:2012-06-04 14:22:08
【问题描述】:
我需要一个能够生成三个数字的函数,以便我可以将它们用作我的 SVG 的 RGB 模式。
虽然这很简单,但我还需要确保我没有两次使用相同的颜色。
我该怎么做?使用简单的rand(种子时间激活)一次生成一个数字,然后呢?我不想排除一个数字,但也许是整个模式?
我有点迷路了。
准确地说,首先调用这个函数我会得到例如 218 199 154,然后我会得到 47 212 236,这绝对是两种不同的颜色。有什么建议么?
另外我认为struct 和int r, int g, int b 会适合这个吗?
编辑:颜色应该与人眼不同。很抱歉之前没有提到这一点。
【问题讨论】:
-
为了保证同一种颜色永远不会被使用两次,只需将目前生成的颜色存储在一个链表中(或者哈希映射,如果你可以访问的话)。继续申请 rand,直到你的号码不在那个集合中。
-
另一个考虑因素:计算机或人是“相同颜色”吗?如果是第二个,那么 RGB 数字中的一个单位的差异可能不足以使其与眼睛有足够的差异。
-
@Arkadiy:是的,与人眼不同。不仅仅是相同颜色的不同色调,无法识别。
-
@EthanSteinberg:随机是否符合概率定律?我的意思是我有 1/255 来生成一个数字吗?意思是在 255 中的 1 中我会得到例如 1 .. 我不会得到 255 255 0 和 255 255 1 的概率是多少?有时会发生这种情况是对还是我完全错了?
-
在这种情况下,您需要一个比较过程来决定 = / != 基于人类感知...