separation static method
Vector3
separation(})
Computes a separation steering force avoiding crowding nearby neighbors.
Implementation
static vm.Vector3 separation(
vm.Vector3 currentPos,
vm.Vector3 currentVel,
List<vm.Vector3> neighbors, {
double desiredDistance = 2.0,
double maxSpeed = 5.0,
double maxForce = 10.0,
}) {
var pushDir = vm.Vector3.zero();
var count = 0;
for (final other in neighbors) {
final diff = currentPos - other;
final dist = diff.length;
if (dist > 0.001 && dist < desiredDistance) {
pushDir += diff.normalized() / dist;
count++;
}
}
if (count == 0) return vm.Vector3.zero();
pushDir /= count.toDouble();
if (pushDir.length2 == 0) return vm.Vector3.zero();
final desiredVel = pushDir.normalized() * maxSpeed;
final force = desiredVel - currentVel;
return truncate(force, maxForce);
}