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));
        }
Example #2
0
        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));
        }