public static Vector3 AntiPenetrate(Vehicle3D me, Vehicle3D[] neighbors, int nNeighbors, float radius) { var v = Vector3.zero; if (neighbors.FindInRadius(me.position, radius, nNeighbors).Count() > 0) { v = Random.insideUnitCircle * me.maxSpeed; } return v; }
public static Vector3 Cohere(Vehicle3D me, Vehicle3D[] neighbors, int nNeighbors, float radius, float minRadius) { var v = Vector3.zero; var count = 0; var sqrMinRadius = minRadius * minRadius; foreach (var f in neighbors.FindInRadius(me.position, radius, nNeighbors)) { var distvec = f.position - me.position; if (distvec.sqrMagnitude < sqrMinRadius) continue; v += f.position; count++; } if (count > 0) { v = v / count - me.position; } return v; }
public static Vector3 Separate(Vehicle3D me, Vehicle3D[] neighbors, int nNeighbors, float radius) { var v = Vector3.zero; foreach (var f in neighbors.FindInRadius(me.position, radius, nNeighbors)) { var distvec = f.position - me.position; v -= distvec; } return v; }