peer Repulsion
fun <A : AgentLike> peerRepulsion(radius: Double, minDistance: Double = 0.0, falloff: (distance: Double) -> Double): Force<A>(source)
Peer-peer repulsion. For each neighbor inside radius (excluding self), apply a force along the direction away from the neighbor with magnitude given by falloff of the inter-agent distance. Distances are clamped at minDistance to keep falloff finite at contact.
Use for both Reynolds-style separation (1/d falloff) and Helbing-style social-force peer repulsion (A * exp((r-d)/B) falloff):
// Boids — inverse distance.
dynamics.addForce(peerRepulsion(radius = 3.0) { d -> 1.0 / d })
// Pedestrians — Helbing exponential.
dynamics.addForce(peerRepulsion(radius = 2.0, minDistance = 0.05) { d ->
2000.0 * exp((0.6 - d) / 0.08)
})Content copied to clipboard