Exemple #1
0
 public HanoiTowerWindow()
 {
     InitializeComponent();
     this.diskNumbersTxt.Text = "5";
     tower = new HanoiTower(5);
     DrawTower();
 }
Exemple #2
0
        private SceneNodeBase GetRootNode()
        {
            var group     = new GroupNode();
            var filenames = new string[] { "floor.obj_", };
            var colors    = new Color[] { Color.Green, };

            for (int i = 0; i < filenames.Length; i++)
            {
                string       folder   = System.Windows.Forms.Application.StartupPath;
                string       filename = System.IO.Path.Combine(folder + @"\..\..\..\..\Infrastructure\CSharpGL.Models", filenames[i]);
                var          parser   = new ObjVNFParser(true);
                ObjVNFResult result   = parser.Parse(filename);
                if (result.Error != null)
                {
                    MessageBox.Show(result.Error.ToString());
                }
                else
                {
                    ObjVNFMesh mesh  = result.Mesh;
                    var        model = new ObjVNF(mesh);
                    var        node  = ShadowMappingNode.Create(model, ObjVNF.strPosition, ObjVNF.strNormal, model.GetSize());
                    node.WorldPosition = new vec3(0, i * 5, 0);
                    node.Color         = colors[i].ToVec3();
                    node.Name          = filename;
                    group.Children.Add(node);
                }
            }
            {
                var       hanoiTower = new GroupNode();
                ObjItem[] items      = HanoiTower.GetDataSource();
                foreach (var item in items)
                {
                    var objFormat = item.model;
                    var filename  = item.GetType().Name;
                    objFormat.DumpObjFile(filename, filename);
                    var          parser = new ObjVNFParser(false);
                    ObjVNFResult result = parser.Parse(filename);
                    if (result.Error != null)
                    {
                        Console.WriteLine("Error: {0}", result.Error);
                    }
                    else
                    {
                        ObjVNFMesh mesh  = result.Mesh;
                        var        model = new ObjVNF(mesh);
                        var        node  = ShadowMappingNode.Create(model, ObjVNF.strPosition, ObjVNF.strNormal, model.GetSize());
                        node.WorldPosition = item.position;
                        node.Color         = item.color;
                        node.Name          = filename;
                        hanoiTower.Children.Add(node);
                    }
                }
                group.Children.Add(hanoiTower);
            }


            return(group);
        }
        private void InitializeTowers(int amountOfTowers)
        {
            Towers = new HanoiTower[amountOfTowers];

            for (int i = 0; i < amountOfTowers; i++)
            {
                Towers[i] = new HanoiTower(i);
            }
        }
Exemple #4
0
        public void HanoiTest()
        {
            var hanoiTower = new HanoiTower();

            for (int i = 0; i < 6; i++)
            {
                hanoiTower.stackA.Push(i.ToString());
            }

            hanoiTower.Hanoi(hanoiTower.stackA.Count, hanoiTower.stackA, hanoiTower.stackB, hanoiTower.stackC);
        }
Exemple #5
0
        public void HanoiTowerRecTest(int disks)
        {
            var game        = new HanoiTower(disks);
            var solvedStack = game.SolveRec();

            Assert.Equal(disks, solvedStack.Count);
            int prev = 0;

            for (var i = 0; i < disks; i++)
            {
                var current = solvedStack.Pop();
                Assert.Equal(prev + 1, current);
                prev = current;
            }
        }
Exemple #6
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            List <int> A = new List <int>()
            {
                2, 1, 0
            };
            List <int> B = new List <int>();
            List <int> C = new List <int>();

            // A.Add(2);
            // A.Add(1);
            // A.Add(0);
            // StringBuilder stringBuilder = new StringBuilder("123");
            // stringBuilder.Append("456");
            // Console.WriteLine(stringBuilder.ToString());
            HanoiTower.Hanoi(A, B, C);
        }
Exemple #7
0
        private SceneNodeBase GetRootNode()
        {
            var group     = new GroupNode();
            var filenames = new string[] { "floor.obj_", };

            for (int i = 0; i < filenames.Length; i++)
            {
                string       folder   = System.Windows.Forms.Application.StartupPath;
                string       filename = System.IO.Path.Combine(folder + @"\..\..\..\..\Infrastructure\CSharpGL.Models", filenames[i]);
                var          parser   = new ObjVNFParser(true);
                ObjVNFResult result   = parser.Parse(filename);
                if (result.Error != null)
                {
                    MessageBox.Show(result.Error.ToString());
                }
                else
                {
                    ObjVNFMesh mesh  = result.Mesh;
                    var        model = new AdjacentTriangleModel(mesh);
                    var        node  = ShadowVolumeNode.Create(model, ObjVNF.strPosition, ObjVNF.strNormal, model.GetSize());
                    node.WorldPosition = new vec3(0, i * 5, 0);
                    node.Name          = filename;
                    group.Children.Add(node);
                }
            }
            {
                var parser     = new ObjVNFParser(false);
                var dataSource = HanoiTower.GetDataSource();
                foreach (var item in dataSource)
                {
                    item.model.DumpObjFile("tmp");
                    var result = parser.Parse("tmp");
                    var model  = new AdjacentTriangleModel(result.Mesh);
                    var node   = ShadowVolumeNode.Create(model, ObjVNF.strPosition, ObjVNF.strNormal, model.GetSize());
                    node.Name          = item.model.GetType().Name;
                    node.Color         = item.color;
                    node.WorldPosition = item.position;
                    group.Children.Add(node);
                }
            }

            return(group);
        }
Exemple #8
0
        public void Test()
        {
            var towers = new HanoiTower[3];

            for (int i = 0; i < towers.Length; i++)
            {
                towers[i] = new HanoiTower(i.ToString(CultureInfo.InvariantCulture));
            }

            const int n = 5;

            for (int i = n - 1; i >= 0; i--)
            {
                towers[0].Add(i);
            }

            towers[0].MoveDisks(n, towers[2], towers[1]);

            CollectionAssert.AreEqual(new int[] {}, towers[0].ToArray());
            CollectionAssert.AreEqual(new int[] {}, towers[1].ToArray());
            CollectionAssert.AreEqual(new[] { 0, 1, 2, 3, 4 }, towers[2].ToArray());
        }
Exemple #9
0
        public void create_hanoi_tower_expect_rules()
        {
            //       =1           =       =
            //      =2=           =       =
            //     ==3==          =       =
            //    ===4===         =       =
            //   ====5====        =       =
            //=================================

            var amountOfDisks = 8;

            var tower = new HanoiTower();

            var source      = new Stack <int>().AddRange(amountOfDisks);
            var destination = new Stack <int>();
            var temporary   = new Stack <int>();

            tower.MoveTower(source.Count, source, destination, temporary);

            Assert.AreEqual(0, source.Count);
            Assert.AreEqual(amountOfDisks, destination.Count);
            Assert.AreEqual(0, temporary.Count);
        }
Exemple #10
0
        private void start_Click(object sender, RoutedEventArgs e)
        {
            ushort count = 0;
            ushort speed;

            if (!ushort.TryParse(diskNumbersTxt.Text, out count) || (count < 1 || count > 10))
            {
                MessageBox.Show("Choose a number between 1 and 10");
                return;
            }
            if (speedTxt.Text.Trim() != string.Empty)
            {
                if (!ushort.TryParse(speedTxt.Text, out speed) || (speed < 1 || speed > 5))
                {
                    MessageBox.Show("Choose speed from 1 to 5");
                    return;
                }
            }
            tower            = new HanoiTower(count);
            start.IsEnabled  = false;
            tower.DiskMoved += Tower_DiskMoved;
            tower.Solve(1, 3, count);
            start.IsEnabled = true;
        }
Exemple #11
0
        private void FormMain_Load(object sender, EventArgs e)
        {
            var position = new vec3(5, 6, 4) * 3;
            var center   = new vec3(0, 0, 0);
            var up       = new vec3(0, 1, 0);
            var camera   = new Camera(position, center, up, CameraType.Perspecitive, this.winGLCanvas1.Width, this.winGLCanvas1.Height);

            this.scene = new Scene(camera);

            //(new FormTree(scene)).Show();

            this.scene.RootNode = new GroupNode();
            {
                var axisNode = AxisNode.Create();
                axisNode.Scale = new vec3(1, 1, 1) * 30;
                this.scene.RootNode.Children.Add(axisNode);
            }

            var list            = new ActionList();
            var transformAction = new TransformAction(scene);

            list.Add(transformAction);
            var renderAction = new RenderAction(scene);

            list.Add(renderAction);
            this.actionList = list;

            this.pickingAction = new Picking(scene);

            //this.triangleTip = new LegacyTriangleNode();
            //this.quadTip = new LegacyQuadNode();
            this.tipNode = HighlightGeometryNode.Create();

            var manipulater = new FirstPerspectiveManipulater();

            manipulater.Bind(camera, this.winGLCanvas1);
            {
                ObjItem[] items = HanoiTower.GetDataSource();
                for (int i = 0; i < items.Length; i++)
                {
                    var item     = items[i];
                    var filename = "item" + (i) + ".obj";
                    item.model.DumpObjFile(filename, "item" + (i));
                    var          parser = new ObjVNFParser(false);
                    ObjVNFResult result = parser.Parse(filename);
                    if (result.Error != null)
                    {
                        //Console.WriteLine("Error: {0}", result.Error);
                    }
                    else
                    {
                        ObjVNFMesh mesh = result.Mesh;
                        var        node = ObjVNFNode.Create(mesh);
                        node.Children.Add(new LegacyBoundingBoxNode(node.ModelSize));
                        //float max = node.ModelSize.max();
                        //node.Scale *= 7.0f / max;
                        node.WorldPosition = item.position;
                        node.Diffuse       = item.color;
                        var rootElement = this.scene.RootNode;
                        this.scene.RootNode.Children.Add(node);
                        //if (rootElement != null) { rootElement.Dispose(); }
                    }
                }
            }
        }
Exemple #12
0
        static void Main(string[] args)
        {
            {
                Console.WriteLine("sphere");
                var sphere   = new Sphere(1, 40, 80);
                var filename = "sphere.obj_";
                sphere.DumpObjFile(filename, "sphere");
                var          parser = new ObjVNFParser(false);
                ObjVNFResult result = parser.Parse(filename);
                if (result.Error != null)
                {
                    Console.WriteLine("Error: {0}", result.Error);
                }
                else
                {
                    ObjVNFMesh mesh  = result.Mesh;
                    var        model = new ObjVNF(mesh);
                    model.DumpObjFile("vnf" + filename, "sphere");
                }
            }
            {
                Console.WriteLine("prismoid");
                var prismoid = new PrismoidModel(5, 5, 6, 6, 2);
                var filename = "prismoid.obj_";
                prismoid.DumpObjFile(filename, "prismoid");
                var          parser = new ObjVNFParser(false);
                ObjVNFResult result = parser.Parse(filename);
                if (result.Error != null)
                {
                    Console.WriteLine("Error: {0}", result.Error);
                }
                else
                {
                    ObjVNFMesh mesh  = result.Mesh;
                    var        model = new ObjVNF(mesh);
                    model.DumpObjFile("vnf" + filename, "prismoid");
                }
            }
            {
                Console.WriteLine("cylinder");
                var cylinder = new CylinderModel(0.25f, 6, 17);
                var filename = "cylinder.obj_";
                cylinder.DumpObjFile(filename, "cylinder");
                var          parser = new ObjVNFParser(false);
                ObjVNFResult result = parser.Parse(filename);
                if (result.Error != null)
                {
                    Console.WriteLine("Error: {0}", result.Error);
                }
                else
                {
                    ObjVNFMesh mesh  = result.Mesh;
                    var        model = new ObjVNF(mesh);
                    model.DumpObjFile("vnf" + filename, "cylinder");
                }
            }

            {
                Console.WriteLine("annulus");
                var annulus  = new AnnulusModel(0.5f + 0.4f, 0.3f, 17, 17);
                var filename = "annulus.obj_";
                annulus.DumpObjFile(filename, "annulus");
                var          parser = new ObjVNFParser(false);
                ObjVNFResult result = parser.Parse(filename);
                if (result.Error != null)
                {
                    Console.WriteLine("Error: {0}", result.Error);
                }
                else
                {
                    ObjVNFMesh mesh  = result.Mesh;
                    var        model = new ObjVNF(mesh);
                    model.DumpObjFile("vnf" + filename, "annulus");
                }
            }

            {
                Console.WriteLine("disk");
                var disk     = new DiskModel(0.5f + 0.4f, 0.3f, 0.3f, 17, 17);
                var filename = "disk.obj_";
                disk.DumpObjFile(filename, "disk");
                var          parser = new ObjVNFParser(false);
                ObjVNFResult result = parser.Parse(filename);
                if (result.Error != null)
                {
                    Console.WriteLine("Error: {0}", result.Error);
                }
                else
                {
                    ObjVNFMesh mesh  = result.Mesh;
                    var        model = new ObjVNF(mesh);
                    model.DumpObjFile("vnf" + filename, "disk");
                }
            }
            {
                Console.WriteLine("hanoiTower");
                var  list         = HanoiTower.GetDataSource();
                uint nextIndex    = 0;
                var  positionList = new List <vec3>();
                var  indexList    = new List <uint>();
                foreach (var item in list)
                {
                    vec3[] positions = item.model.GetPositions();
                    uint[] indexes   = item.model.GetIndexes();
                    for (int i = 0; i < positions.Length; i++)
                    {
                        positionList.Add(positions[i] + item.position);
                    }
                    for (int i = 0; i < indexes.Length; i++)
                    {
                        indexList.Add(indexes[i] + nextIndex);
                    }

                    nextIndex += (uint)positions.Length;
                }
                var hanoiTower = new TmpModel(positionList.ToArray(), indexList.ToArray());
                var filename   = "HanoiTower.obj_";
                hanoiTower.DumpObjFile(filename, "hanoiTower");
                var          parser = new ObjVNFParser(false);
                ObjVNFResult result = parser.Parse(filename);
                if (result.Error != null)
                {
                    Console.WriteLine("Error: {0}", result.Error);
                }
                else
                {
                    ObjVNFMesh mesh  = result.Mesh;
                    var        model = new ObjVNF(mesh);
                    model.DumpObjFile("vnf" + filename, "hanoiTower");
                }
            }
            Console.WriteLine("done");
        }
 public void HanoiCorrect()
 {
     HanoiTower.Solve(3, new MockLogger(3));
     HanoiTower.Solve(3, new ConsoleHanoiLogger());
 }
Exemple #14
0
        public void HanoiTowerTest(int disks)
        {
            var game = new HanoiTower(disks);

            game.Solve();
        }
Exemple #15
0
        public void HanoiTower_5Disks()
        {
            var game = new HanoiTower(5);

            game.Solve();
        }