什么样的算法会生成像World of Goo中的随机“粘球” 。我正在使用Proccesing,但任何通用算法都可以。
我想这归结为如何“随机”制作有点圆的球,但不是完美的圆,而且看起来仍然很逼真?
提前致谢!
什么样的算法会生成像World of Goo中的随机“粘球” 。我正在使用Proccesing,但任何通用算法都可以。
我想这归结为如何“随机”制作有点圆的球,但不是完美的圆,而且看起来仍然很逼真?
提前致谢!
不确定这是否是您要查找的内容,因为我无法在工作中查看该站点。:)
圆只是椭圆的特例,其中长轴和短轴相等。压扁球形状是一个椭圆,其中一个轴比另一个轴长。您可以为轴生成不同的长度并旋转椭圆以获得这些不规则形状。
正如 Unreason 所说,World of Goo 与其说是形状,不如说是物理模拟。
但是创建球状不规则形状的一种简单方法是从一个圆上的 n 个顶点(点)V_1、V_2 ... V_n 开始,并对其应用一些随机变形。有很多方法可以做到这一点,从简单地围绕一些单个顶点移动到复杂的物理模拟。
一些想法:
1) 选择一个随机顶点 V_i,选择一个随机向量 T,将该向量作为平移(移动)应用到 V_i,也将 T 应用到所有其他顶点 V_j,但根据与 V_i 的“距离”(其中距离可以是 j 和 i 之间的绝对差异,或者是 V_j 到 V_i 的实际几何距离)。对于比例因子,您可以使用任何函数 f,对于 f(0),它为 1,随着距离的增加而减小(基本上是径向基函数)。
for each V_j
V_j = scalingFactor(distance(V_i, V_j)) * translationVector + V_j
2)您像 1 中一样移动 V_i,但现在您模拟所有相邻顶点之间的弹簧状连接,并根据拉伸弹簧产生的力迭代移动所有顶点。
3) 对于更多圆形,您可以在 B 样条曲线的控制点上执行 1) 或 2)。
当您移动顶点过多时,请注意自相交。
只是一些粗略的想法,未经测试...
也许Metaballs ( wiki ) 是开始的东西.. 但我不确定。
否则我会建议一种粒子方法,其中一个球由许多粘在一起的粒子组成,从而产生不规则性(请注意,这需要一个最小的物理引擎来处理将所有粒子保持在一起的弹簧体)。