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); } }
public bool IsOnRightSite(Vector2d point, double epsilon) { var direction = point - A; return(Vector2dUtils.OrthogonalRight(U).Dot(direction) > -epsilon); }