Esempio n. 1
0
            private static Grid <bool> ResolveComponent(HilbertCurveComponent val)
            {
                var result = new Grid <bool>(new Coord(3, 3));

                // corners are always true
                result.SetCell(new Coord(0, 0), true);     // top left
                result.SetCell(new Coord(0, 2), true);     // top right
                result.SetCell(new Coord(2, 0), true);     // bottom left
                result.SetCell(new Coord(2, 2), true);     // bottom right
                if (val == HilbertCurveComponent.A)        // bottom missing
                {
                    result.SetCell(new Coord(0, 1), true); // top middle
                    result.SetCell(new Coord(1, 0), true); // left middle
                    result.SetCell(new Coord(1, 2), true); // right middle
                }
                else if (val == HilbertCurveComponent.B)   // right missing
                {
                    result.SetCell(new Coord(0, 1), true); // top middle
                    result.SetCell(new Coord(1, 0), true); // left middle
                    result.SetCell(new Coord(2, 1), true); // bottom middle
                }
                else if (val == HilbertCurveComponent.C)   // top missing
                {
                    result.SetCell(new Coord(1, 0), true); // left middle
                    result.SetCell(new Coord(1, 2), true); // right middle
                    result.SetCell(new Coord(2, 1), true); // bottom middle
                }
                else if (val == HilbertCurveComponent.D)   // left missing
                {
                    result.SetCell(new Coord(0, 1), true); // top middle
                    result.SetCell(new Coord(1, 2), true); // right middle
                    result.SetCell(new Coord(2, 1), true); // bottom middle
                }
                return(result);
            }
Esempio n. 2
0
            private static Grid <HilbertCurveComponent> initialState(HilbertCurveComponent orientation)
            {
                var result = new Grid <HilbertCurveComponent>(new Coord(1, 1));

                result.SetCell(new Coord(0, 0), orientation);
                return(result);
            }
Esempio n. 3
0
            public static Grid <bool> GenerateHilbertCurve(int size, HilbertCurveComponent orientation = HilbertCurveComponent.A)
            {
                var result = initialState(orientation);

                for (int x = 0; x < size; x++)
                {
                    result = IterateHilbertCurve(result);
                }
                return(ResolveCurve(result));
            }
Esempio n. 4
0
            private static Grid <HilbertCurveComponent> IterateCurveComponent(HilbertCurveComponent component)
            {
                List <HilbertCurveComponent> list;

                switch (component)
                {
                case HilbertCurveComponent.A:
                    list = new List <HilbertCurveComponent> {
                        HilbertCurveComponent.A, HilbertCurveComponent.A,
                        HilbertCurveComponent.D, HilbertCurveComponent.B
                    };
                    break;

                case HilbertCurveComponent.B:
                    list = new List <HilbertCurveComponent> {
                        HilbertCurveComponent.B, HilbertCurveComponent.C,
                        HilbertCurveComponent.B, HilbertCurveComponent.A
                    };
                    break;

                case HilbertCurveComponent.C:
                    list = new List <HilbertCurveComponent> {
                        HilbertCurveComponent.D, HilbertCurveComponent.B,
                        HilbertCurveComponent.C, HilbertCurveComponent.C
                    };
                    break;

                case HilbertCurveComponent.D:
                    list = new List <HilbertCurveComponent> {
                        HilbertCurveComponent.C, HilbertCurveComponent.D,
                        HilbertCurveComponent.A, HilbertCurveComponent.D
                    };
                    break;

                default:
                    throw new Exception("Hilbert Curve component " + component.ToString() + " not handled in IterateCurveComponent()");
                }
                return(list.ToGrid(new Coord(2)));
            }