实现物理随机性(如在 Blender 中)
Posted
技术标签:
【中文标题】实现物理随机性(如在 Blender 中)【英文标题】:Implementing randomness for physics (like in Blender) 【发布时间】:2021-03-16 13:02:11 【问题描述】:例如,我指的是 Blender 的粒子碰撞系统,您可以在其中将粒子阻尼的随机性设置在 0.0 和 1.0 之间。 我现在的问题是:它究竟是如何工作的?是的,会有一个介于 0.0 和 1.0 之间的随机数,但它如何应用于阻尼因子?我想在 Java 中创建类似的东西,因此我想完全理解其背后的计算。随机因子是概率 p 和计算类似于高斯分布吗? 作为一个应用示例:我想随机化一个向量的方向。
vector.y += random1; vector.y += random2; vector.z += random3; vector.scale(prevLength/vector.length);
但是,看起来所有向量分量都为零,这不太可能但并非不可能。很明显,这不是正确的解决方案。
【问题讨论】:
听起来更像是一道数学题。实际上,这听起来像是您应该在blender.stackexchange.com 上问的问题 mh,也许...另一方面,我的目标是在 java 中实现它... 为什么关门了?我要求将随机性应用于因子的理论。在什么意义上不够集中? 我没有投票结束,但可能是因为“将随机性应用于因子的理论”不是一个特定的编程问题。 您好,如果您需要理论方面的帮助,请不要在 Stack Overflow 上提问(数学可能是一个更好的地方?)。如果您对 Java 实现或 Java 代码的某些特定问题有疑问,请使用代码示例更新您的问题,以了解如何重现问题,我们将为您提供帮助。 【参考方案1】:我找到了阻尼的答案
public Vector3f damping(Vector3f vector)
float random = (float) (this.randomDamp*(Math.random()*2-1));
float clampedValue = Math.max(0, Math.min(1, (1-damp)+random)); //clamp between 0 and 1
vector.scale(clampedValue);
return vector;
看起来搅拌机只是添加随机数,因此因子为 0.5,随机因子为 1,最终因子将在 -0.5 (0) 和 1.5 (1) 之间变化。
【讨论】:
以上是关于实现物理随机性(如在 Blender 中)的主要内容,如果未能解决你的问题,请参考以下文章