昨天我看到了克雷格雷诺兹的Boids http://www.red3d.com/cwr/boids/,随后我想尝试一下用 Java 实现一个简单的 2D 版本。
我已经根据以下内容整理了一个相当基本的设置康拉德·帕克的笔记 http://www.vergenet.net/~conrad/boids/pseudocode.html.
然而,我遇到了一些相当奇怪的(在我看来)行为。目前,我的身体相当快地移动到一个粗糙的网格或格子中,并继续当场抽搐。我的意思是它们会稍微移动并且旋转得非常频繁。
目前,我已经实施了:
- 结盟
- Cohesion
- 分离
- 限速
最初,我的 boids 随机分布在屏幕区域(与 Parker 的方法略有不同),并且它们的速度都指向屏幕区域的中心(请注意,随机初始化的速度给出相同的结果)。更改速度限制值只会改变物体进入该模式的速度,而不会改变该模式的形成。
在我看来,这可能是:
- 我正在使用的参数的结果(现在我的代码如帕克伪代码中所述;我尚未尝试由雷诺兹描述的角度和半径定义的影响区域。)
- 我需要实施但不知道的事情。
- 我做错了什么。
预期的行为将更类似于 Reynolds 的 boids 页面上小程序中发生的二维版本,尽管现在我还没有实现任何方法来将 boids 保留在屏幕上。
以前有人遇到过这种情况吗?关于原因和/或如何解决它有什么想法吗?如果有帮助的话,我可以发布相关行为的 .gif。
也许您对分离规则的权重太强,导致所有 boids 尽可能远离所有相邻 boids。我的伪代码中有各种充当权重的常量:规则 1 中的 /100 和规则 3 中的 /8(以及规则 2 中的隐式 *1);这些可以进行调整,这通常对于模拟不同的行为很有用,例如紧密聚集的昆虫或滑翔的鸟类。
也是任意|距离|应修改分隔规则中的
玩得开心!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)