public CartesianFieldController(CartesianField field, CartesianFieldRenderer renderer)
 {
     Field            = field;
     Parser           = new Parser(Field);
     Renderer         = renderer;
     PendingVariables = new List <Variable>();
 }
        public CartesianFieldRenderer(CartesianField field, FieldRendererControl renderControl)
        {
            Field         = field;
            RenderControl = renderControl;

            FieldOfView = new Camera(new Vector2(-5, -5), new Vector2(10, 10));
            P_Renderer  = new PrimitiveRenderer(renderControl);
        }
Пример #3
0
 public Maze(params int[] dimensions)
 {
     cells = new CartesianField <bool[]>(new ImmutableVector <int>(dimensions), _ =>
     {
         var walls = new bool[dimensions.Length];
         for (int i = 0; i < walls.Length; ++i)
         {
             walls[i] = true;
         }
         return(walls);
     });
 }
Пример #4
0
        public MainForm()
        {
            InitializeComponent();

            Field      = new CartesianField();
            Renderer   = new CartesianFieldRenderer(Field, GraphWindow);
            Controller = new CartesianFieldController(Field, Renderer);

            MainGraphListControl.Controller = Controller;
            GraphWindow.FieldRenderer       = Renderer;
            GraphWindow.CanBeControlled     = true;
            GraphWindow.Run(40);
        }
Пример #5
0
 public GraphOptionsForm(FunctionGraph graph)
 {
     InitializeComponent();
     TestField           = new CartesianField();
     Renderer            = new CartesianFieldRenderer(TestField, GraphWindow);
     Controller          = new CartesianFieldController(TestField, Renderer);
     K                   = Controller.CreateVariable("k");
     Graph               = Controller.CreateGraph(Controller.CreateFunction("sin ( x + k )"));
     WidthTrackBar.Value = (int)(Graph.Width * 10);
     WidthLabel.Text     = "Width: " + Graph.Width.ToString();
     Controller.EnableGraph(Graph);
     GraphWindow.FieldRenderer = Renderer;
     GraphWindow.SetCameraBounds(new RectangleD(new Vector2(-5, -2), new Vector2(10, 4)));
     GraphWindow.OnUpdate += OnGraphUpdate;
     GraphWindow.Run(24);
 }
Пример #6
0
    public static void Generate(Maze maze)
    {
        var cells = new CartesianField <Cell>(maze.Dimensions, coordinate => new Cell(maze[coordinate]));
        var walls = new List <Wall>(maze.Volume * maze.Dimensions.Dimensionality);

        foreach (var coordinate in cells.Coordinates)
        {
            for (int i = 0; i < coordinate.Dimensionality; ++i)
            {
                if (coordinate[i] > 0)
                {
                    walls.Add(new Wall
                    {
                        owner = cells[coordinate],
                        side  = i,
                        other = cells[Maze.GetNeighbor(coordinate, i)]
                    });
                }
            }
        }

        // eliminate n - 1 walls
        for (int c = 1; c < maze.Volume; ++c)
        {
            int i    = Random.Range(0, walls.Count);
            var wall = walls[i];
            walls.RemoveAt(i);

            if (ResolveSubtree(wall.owner) == ResolveSubtree(wall.other))
            {
                --c;
            }
            else
            {
                wall.owner.Walls[wall.side]        = false;
                ResolveSubtree(wall.owner).Subtree = wall.other.Subtree;
            }
        }
    }