fix brownian behavior

This commit is contained in:
MrKBear 2022-05-12 20:22:18 +08:00
parent 8670b577f9
commit 4eb6637062

View File

@ -132,7 +132,7 @@ class Brownian extends Behavior<IBrownianBehaviorParameter, IBrownianBehaviorEve
const vLen = individual.vectorLength(individual.velocity); const vLen = individual.vectorLength(individual.velocity);
// 随机旋转算法 // 随机旋转算法
if (vLen !== 0) { if (vLen > 0) {
randomDir = this.randomFocusRange( randomDir = this.randomFocusRange(
[ [
individual.velocity[0] / vLen, individual.velocity[0] / vLen,
@ -141,6 +141,10 @@ class Brownian extends Behavior<IBrownianBehaviorParameter, IBrownianBehaviorEve
], ],
this.parameter.angle / 2 this.parameter.angle / 2
); );
if (isNaN(randomDir[0]) || isNaN(randomDir[1]) || isNaN(randomDir[2])) {
randomDir = this.randomFocus360()
}
} }
else { else {
@ -153,10 +157,12 @@ class Brownian extends Behavior<IBrownianBehaviorParameter, IBrownianBehaviorEve
randomDir = this.randomFocus360() randomDir = this.randomFocus360()
} }
const randomLength = minStrength + Math.random() * (maxStrength - minStrength);
individual.applyForce( individual.applyForce(
minStrength + randomDir[0] * (maxStrength - minStrength), randomDir[0] * randomLength,
minStrength + randomDir[1] * (maxStrength - minStrength), randomDir[1] * randomLength,
minStrength + randomDir[2] * (maxStrength - minStrength) randomDir[2] * randomLength
); );
nextTime = minFrequency + Math.random() * (maxFrequency - minFrequency); nextTime = minFrequency + Math.random() * (maxFrequency - minFrequency);