public void TestTwoEdgesCreateAngle() { var first = new Edge(Vector.ZeroVector, new Vector(20, 0)); var second = new Edge(Vector.ZeroVector, new Vector(-10, 10)); Assert.IsTrue(CollisionDetector.AreCollide(first, second)); }
private bool IsInView(Vector objectCenter, List <Edge> sceneEdges) { var vectorToObject = (objectCenter - Position).Normalize(); var sightNormal = sight.GetNormal(); var v = Vector.ScalarProduct(vectorToObject, sightNormal); var sc = Vector.ScalarProduct(vectorToObject, sight); if (sc < 0) { return(false); } var sightAngleVector = v > 0 ? sight.Rotate(sightAngle, Vector.ZeroVector) : sight.Rotate(-sightAngle, Vector.ZeroVector); var sightAngleVectorProjection = Vector.ScalarProduct(sightAngleVector, sightNormal); if (!(Math.Abs(sightAngleVectorProjection) > Math.Abs(v))) { return(false); } foreach (var wall in sceneEdges) { if (CollisionDetector.AreCollide(Position, objectCenter, wall)) { return(false); } } return(true); }
public void TestTwoEdgesDontCross() { var first = new Edge(Vector.ZeroVector, new Vector(20, 0)); var second = new Edge(new Vector(0, 10), new Vector(20, 10)); Assert.IsFalse(CollisionDetector.AreCollide(first, second)); }