【发布时间】:2012-05-21 20:46:58
【问题描述】:
以上是使用 rand() 生成的示例图像,以获取随机坐标并将常数添加到这些坐标处的像素值。这是几千次迭代后的样子。我在 Mac OS X Lion 中使用 stdlib.h 中的 rand(),将 time(NULL) 作为种子。
您可以清楚地看到垂直线,就好像 x 坐标奇数的线比 x 坐标偶数的线具有更高的值。
我将如何实现一种更好的算法,或者我在哪里可以找到一个没有很多依赖项的算法? (我更喜欢只有头文件)。
这是代码(抱歉花了我这么长时间):
void generate(int iterations = 1) {
for (unsigned int x = 0;x < (area * 4);++x) {
map[rand() % area] += 1;
}
number a = min();
number b = max();
for (int i = 0;i < area;++i) {
map[i] -= a;
map[i] /= b;
}
}
地图包含双浮点数,后来转换为 RGB 值。
【问题讨论】:
-
您是否 100% 确定我们不能排除您使用
rand()时出现的错误? -
请发布代码,显示您如何使用
rand()。 -
是的,
rand()非常可怕。在大多数实现中,它只是一个简单的 LCG,可能不适合除了掷骰子之外的任何事情(即使这样,大多数程序员也会做一些愚蠢的事情,例如rand() % 6 + 1)。 -
代码或它没有发生。
-
使用
map[rand() / (((unsigned) RAND_MAX + 1) / area)] += 1;,而不是map[rand() % area] += 1;。这是一个改进,因为来自rand()的高位比低位具有更好的分布,假设它是 LGC。