我需要在Flash电影中随机散布可变数量的对象。仅仅随机选择位置不会产生视觉上令人愉悦的输出。对象最终堆叠在一起,所有对象都在一侧聚集在一起,等等。
我正在寻找一些类似的算法,Photoshop用来创建扩散抖动时,转换为位图模式的图像。
发布于 2010-02-05 03:01:55
如果你没有那么多的对象,这很粗糙,但却是可行的:
var myObjects:Array;
...
for (var i = 0; i < myObjects.length; ++i) {
var overlaps:Boolean = true;
while (overlaps) {
// Pick a random location
myObjects[i]._x = Math.random() * WIDTH;
myObjects[i]._y = Math.random() * HEIGHT;
// Make sure it doesn't overlap any object that has been placed
overlaps = false;
for (var j = 0; j < i; ++j) {
if (myObjects[i].hitTest(myObjects[j])) {
overlaps = true;
break;
}
}
}
}一些注意事项:
编辑:稍微修改了代码,使其适用于AS2,而不是AS3
发布于 2010-02-05 02:33:12
一种低成本的方法:生成某种潜在的重复模式(例如网格),然后干扰位置。这将给人一种随机性的外观,其中包含一些规律性:
伪码ahoy:
for(x=0; x<max; x+=step) {
for(y=0; y<max; y+=step) {
location = x*step+random(randsize), y*step+random(randsize);
}
}尝试步长和随机大小,直到它看起来对你很好。
注意:这并不排除重叠;要做到这一点,请在相邻的x之间添加一个随机量,或者查看类似于随机点的Voronoi图,或者生成一系列随机点并删除重叠,或者...
发布于 2010-02-05 02:33:40
随机永远不会足够随机,不是吗?:)探索伪随机数生成器可能是值得的。这里有一个很好的实现/示例:http://lab.polygonal.de/2007/04/21/a-good-pseudo-random-number-generator-prng/
尝试一些种子,直到你找到一些视觉上令人愉悦的东西。祝好运!
https://stackoverflow.com/questions/2202062
复制相似问题