コード例 #1
0
        private static void InsertEntrances(InDoorGeneratorSettings settings, Floor floor,
                                            List <SkeletonEdge> walls)
        {
            var footprint = settings.Footprint;

            // doors are not set
            if (settings.Doors == null)
            {
                FindDoorPosition(settings);
            }

            foreach (var door in settings.Doors)
            {
                var start = footprint[door.Key];
                var end   = footprint[(door.Key + 1) % footprint.Count];

                var centerOffset = door.Value;
                var vec          = (end - start).Normalized();
                var startOfDoor  = start + vec * (centerOffset - settings.HalfTransitAreaWidth);
                var endOfDoor    = start + vec * (centerOffset + settings.HalfTransitAreaWidth);
                floor.Entrances.Add(new LineSegment2d(startOfDoor, endOfDoor));

                var centerOfDoor = start + vec * centerOffset;
                vec.Negate();
                var doorRay = new LineParametric2d(centerOfDoor, Vector2dUtils.OrthogonalRight(vec));
                InsertEntrance(settings, walls, doorRay, centerOffset + settings.HalfTransitAreaWidth);
            }
        }
コード例 #2
0
        public bool IsOnRightSite(Vector2d point, double epsilon)
        {
            var direction = point - A;

            return(Vector2dUtils.OrthogonalRight(U).Dot(direction) > -epsilon);
        }