private static void DummyBoundsFeatures(Manifold manifold, out CollisionFeatures features) { var aRect = new AlignedRectangle(manifold.A.Entity.Transform.WorldPosition, manifold.A.AABB.Size / 2); var bRect = new AlignedRectangle(manifold.B.Entity.Transform.WorldPosition, manifold.B.AABB.Size / 2); CalculateCollisionFeatures(aRect, bRect, 1, out features); }
public void CreateRandomStudents <T>(int nStudents, AlignedRectangle region) where T : IndividualIntelligence, new() { for (int i = 0; i < nStudents; ++i) { var newPerson = new Person(this, new Point(0, 0)); newPerson.Intelligence = new T { Owner = newPerson }; while (true) { double x = RandomGenerator.NextDouble(region.UpperLeft.X, region.LowerRight.X); double y = RandomGenerator.NextDouble(region.UpperLeft.Y, region.LowerRight.Y); Point proposedPosition = new Point(x, y); if (!HitsWall(proposedPosition, newPerson.PhysicalRadius) && !BreachesPersonalSpace(newPerson, proposedPosition)) { newPerson.Position = proposedPosition; People.Add(newPerson); break; } } } }
static public void Run() { const double roomRadius = 20; const double doorSize = 4; const int nStudents = 20; var engine = new FireDrillEngine { Floor = new AlignedRectangle(new Point(-roomRadius, roomRadius), new Point(roomRadius, -roomRadius)) }; // Left wall engine.Walls.Add(new Wall(new Point(-roomRadius, -roomRadius), new Point(-roomRadius, 0))); // Right wall engine.Walls.Add(new Wall(new Point(roomRadius, -roomRadius), new Point(roomRadius, 0))); // Back wall engine.Walls.Add(new Wall(new Point(-roomRadius, -roomRadius), new Point(roomRadius, -roomRadius))); // Front walls engine.Walls.Add(new Wall(new Point(-roomRadius, 0), new Point(-doorSize / 2, 0))); engine.Walls.Add(new Wall(new Point(roomRadius, 0), new Point(doorSize / 2, 0))); var usableRegion = new AlignedRectangle(new Point(-roomRadius, 0), new Point(roomRadius, -roomRadius)); // Make students engine.CreateRandomStudents <IndividualIntelligenceADVAIT>(nStudents, usableRegion); var visualization = new FireDrillVisualization(engine); var viz = new MotionVisualizer3D.MotionVisualizer3DControl(visualization); viz.Show(); }
private static void BoxBox(Manifold manifold, PhysShapeAabb a, PhysShapeAabb b, float flip, out CollisionFeatures features) { var aRect = new AlignedRectangle(manifold.A.Entity.Transform.WorldPosition, a.LocalBounds.Size / 2); var bRect = new AlignedRectangle(manifold.B.Entity.Transform.WorldPosition, b.LocalBounds.Size / 2); CalculateCollisionFeatures(in aRect, in bRect, flip, out features); }
public void BoxBox_NotCollide() { var a = new AlignedRectangle(new Vector2(1, 0), new Vector2(0.5f, 0.5f)); var b = new AlignedRectangle(Vector2.Zero, new Vector2(0.5f, 0.5f)); CollisionSolver.CalculateCollisionFeatures(in a, in b, 1, out var results); Assert.That(results.Collided, Is.False); }
private static void CircleBox(Manifold manifold, PhysShapeCircle a, PhysShapeAabb b, float flip, out CollisionFeatures features) { var aRad = a.Radius; var aPos = manifold.A.Entity.Transform.WorldPosition; var bRect = new AlignedRectangle(manifold.B.Entity.Transform.WorldPosition, b.LocalBounds.Size / 2); CalculateCollisionFeatures(bRect, new Circle(aPos, aRad), (float)flip * -1, out features); }
public void BoxBox_Collide() { var a = new AlignedRectangle(new Vector2(1, 0), new Vector2(0.5f, 0.5f)); var b = new AlignedRectangle(new Vector2(0.25f, 0.15f), new Vector2(0.5f, 0.5f)); CollisionSolver.CalculateCollisionFeatures(in a, in b, 1, out var results); Assert.That(results.Collided, Is.True); Assert.That(results.Normal, Is.EqualTo(new Vector2(-1, 0))); Assert.That(results.Penetration, Is.EqualTo(0.25f / 2)); Assert.That(results.Contacts, Is.Not.Null); Assert.That(results.Contacts.Length, Is.EqualTo(1)); Assert.That(results.Contacts[0], Is.EqualTo(new Vector2(0.5f, 0.15f))); }