예제 #1
0
    private bool TestInsertValuesFromMap()
    {
        bool   success  = true;
        string messages = "";

        int size   = 4;
        int height = 2;

        int[,] imageMap = new int[, ] {
            { 0, 0, 1, 1 },
            { 0, 0, 1, 1 },
            { 0, 1, 0, 0 },
            { 1, 1, 0, 1 },
        };

        LinkedQuadTree linkedQuadTree = new LinkedQuadTree(Vector2.zero, size, height);

        linkedQuadTree.InsertValuesFromMap(imageMap);

        TestAssert(linkedQuadTree.Nodes[1].Value == 3, "Expected value 3!", ref success, ref messages);
        TestAssert(linkedQuadTree.Nodes[2].Value == 2, "Expected value 2!", ref success, ref messages);
        TestAssert(linkedQuadTree.Nodes[4].Value == 4, "Expected value 4!", ref success, ref messages);

        TestAssert(linkedQuadTree.IsEmpty(linkedQuadTree.Nodes[1]) == false, "Not expected empty in node 1!", ref success, ref messages);
        TestAssert(linkedQuadTree.IsFull(linkedQuadTree.Nodes[1]) == false, "Not expected full in node 1!", ref success, ref messages);

        TestAssert(linkedQuadTree.IsEmpty(linkedQuadTree.Nodes[3]) == true, "Expected empty in node 3!", ref success, ref messages);
        TestAssert(linkedQuadTree.IsFull(linkedQuadTree.Nodes[4]) == true, "Expected full in node 4!", ref success, ref messages);

        return(success);
    }
예제 #2
0
    public void RenderMap()
    {
        LinkedQuadTree = new LinkedQuadTree(-Vector2.one * Size / 2, Size, MaxDepth);

        float[,] map = GenerateValueMapFromImage(InputImage);
        ImageMapRenderer.RenderBitMap(map, Treshold);
        MeshGenerator.GenerateMarchingSquaresMesh(map, Treshold, MaxDepth);

        //        float[,] map = GenerateValueMapFromPerlinNoise();
        //        ImageMapRenderer.RenderBitMap(map, PerlinTreshold);
        //        MeshGenerator.GenerateMarchingSquaresMesh(map, Treshold, MaxDepth);

//        ImageMapRenderer.RenderBitMap(map);

//        Outlines = FindAllOutlines(map);
//
//        List<Cell> allOutlineCells = new List<Cell>();
//        for (int i = 0; i < Outlines.Count; i++) {
//            for (int j = 0; j < Outlines[i].Count; j++) {
//                allOutlineCells.Add(Outlines[i][j]);
//            }
//        }

//        List<Cell> fillPixels = new List<Cell>();
//        for (int y = 0; y < Size; y++) {
//            for (int x = 0; x < Size; x++) {
//                if (map[x, y] == 0)
//                    fillPixels.Add(new Cell(x, y, Size, 0));
//            }
//        }
//
//        QuadTree = new QuadTree(fillPixels, 0, 0, Size, MaxDepth, 4);


//        int size = (int) Size;
//        QuadTree = new QuadTree(new List<Cell>() {
//            new Cell(2, 2, size, 999),
//
//            //            new Cell((int) (Random.value * size), (int) (Random.value * size), size, 999),
//            //            new Cell((int) (Random.value * size), (int) (Random.value * size), size, 999),
//            //            new Cell((int) (Random.value * size), (int) (Random.value * size), size, 999),
//
//            //            new Cell((int) (Random.value * size), (int) (Random.value * size), 999),
//            //            new Cell((int) (Random.value * size), (int) (Random.value * size), 999),
//            //            new Cell((int) (Random.value * size), (int) (Random.value * size), 999),
//            //
//            //            new Cell((int) (Random.value * size), (int) (Random.value * size), 999),
//            //            new Cell((int) (Random.value * size), (int) (Random.value * size), 999),
//            //            new Cell((int) (Random.value * size), (int) (Random.value * size), 999),
//        }, 0, 0, size, MaxDepth);
//
//        Debug.Log(string.Format("{0}", QuadTree));


//        DebugMapRenderer.RenderColourMap(DebugMap);

//        MeshGenerator.GenerateQuadTreeMesh(QuadTree);

//        Debug.Log(string.Format("value at 3,3={0}", QuadTree.ValueAtPosition(3, 3)));
    }
예제 #3
0
    private bool TestGetCoordinateOfLeafNodeHeight3()
    {
        bool   success  = true;
        string messages = "";

        int size   = 128;
        int height = 3;

        LinkedQuadTree     linkedQuadTree = new LinkedQuadTree(Vector2.zero, size, height);
        LinkedQuadTreeNode lastNode       = linkedQuadTree.Nodes[linkedQuadTree.Nodes.Length - 1];

        int[] coordinates = linkedQuadTree.GetCoordinateOfLeafNode(lastNode);
        TestAssert(coordinates[0] == 3, "Expected 3!", ref success, ref messages);
        TestAssert(coordinates[1] == 3, "Expected 3!", ref success, ref messages);

        return(success);
    }
예제 #4
0
    private bool TestGetAllParentNodes()
    {
        bool   success  = true;
        string messages = "";

        int size   = 128;
        int height = 3;

        LinkedQuadTree     linkedQuadTree = new LinkedQuadTree(new Vector2(-size / 2, -size / 2), size, height);
        LinkedQuadTreeNode lastNode       = linkedQuadTree.Nodes[linkedQuadTree.Nodes.Length - 1];

        LinkedQuadTreeNode[] parentNodes = linkedQuadTree.GetAllParentNodes(lastNode);

        TestAssert(parentNodes.Length == 2, "Expected 2 parent nodes!", ref success, ref messages);
        TestAssert(parentNodes[0].Index == 0, "Expected top parent to be root!", ref success, ref messages);
        TestAssert(parentNodes[1].Index == 4, "Expected second parent have index 4!", ref success, ref messages);

        return(success);
    }
예제 #5
0
    private bool TestNormalizedValue()
    {
        int size   = 128;
        int height = 3;

        LinkedQuadTree linkedQuadTree = new LinkedQuadTree(new Vector2(-size / 2, -size / 2), size, height);

        linkedQuadTree.InsertValue(1, linkedQuadTree.Nodes[linkedQuadTree.Nodes.Length - 1]);
        linkedQuadTree.InsertValue(1, linkedQuadTree.Nodes[linkedQuadTree.Nodes.Length - 2]);
        linkedQuadTree.InsertValue(1, linkedQuadTree.Nodes[linkedQuadTree.Nodes.Length - 3]);
        linkedQuadTree.InsertValue(1, linkedQuadTree.Nodes[linkedQuadTree.Nodes.Length - 4]);

        bool   success  = true;
        string messages = "";

        TestAssert(linkedQuadTree.NormalizedValue(linkedQuadTree.Nodes[20]) == 1, "Expected node 20 to have value 1!", ref success, ref messages);
        TestAssert(linkedQuadTree.NormalizedValue(linkedQuadTree.Nodes[4]) == 1, "Expected node 4 to have value 1!", ref success, ref messages);
        TestAssert(linkedQuadTree.NormalizedValue(linkedQuadTree.Nodes[0]) == 0.25f, "Expected node 0 to have value 0.25!", ref success, ref messages);

        return(success);
    }
예제 #6
0
    private bool TestNumberOfCells()
    {
        bool   success  = true;
        string messages = "";

        int size   = 128;
        int height = 3;

        LinkedQuadTree     linkedQuadTree = new LinkedQuadTree(new Vector2(-size / 2, -size / 2), size, height);
        LinkedQuadTreeNode lastNode       = linkedQuadTree.Nodes[linkedQuadTree.Nodes.Length - 1];

        TestAssert(linkedQuadTree.NumberOfCells(linkedQuadTree.Nodes[0]) == 16, "Expected 4 cells at this depth!", ref success, ref messages);
        TestAssert(linkedQuadTree.NumberOfCells(linkedQuadTree.Nodes[1]) == 4, "Expected 2 cells at this depth!", ref success, ref messages);
        TestAssert(linkedQuadTree.NumberOfCells(lastNode) == 1, "Expected 1 cell at this depth!", ref success, ref messages);

        TestAssert(linkedQuadTree.NumberOfCellsPerSide(linkedQuadTree.Nodes[0]) == 4, "Expected 4 cells at this depth!", ref success, ref messages);
        TestAssert(linkedQuadTree.NumberOfCellsPerSide(linkedQuadTree.Nodes[1]) == 2, "Expected 2 cells at this depth!", ref success, ref messages);
        TestAssert(linkedQuadTree.NumberOfCellsPerSide(lastNode) == 1, "Expected 1 cell at this depth!", ref success, ref messages);

        return(success);
    }
예제 #7
0
    private bool TestEmptyAndFull()
    {
        int size   = 128;
        int height = 2;

        LinkedQuadTree linkedQuadTree = new LinkedQuadTree(new Vector2(-size / 2, -size / 2), size, height);

        LinkedQuadTreeNode lastNode = linkedQuadTree.Nodes[linkedQuadTree.Nodes.Length - 1];

        linkedQuadTree.InsertValue(1, lastNode);

        bool   success  = true;
        string messages = "";

        TestAssert(linkedQuadTree.IsFull(linkedQuadTree.Nodes[4]) == true, "Expected cell 4 to be full!", ref success, ref messages);
        TestAssert(linkedQuadTree.IsFull(linkedQuadTree.Nodes[0]) == false, "Expected cell 0 not to be full!", ref success, ref messages);
        TestAssert(linkedQuadTree.IsEmpty(linkedQuadTree.Nodes[4]) == false, "Expected cell 4 not to be empty!", ref success, ref messages);
        TestAssert(linkedQuadTree.IsEmpty(linkedQuadTree.Nodes[0]) == false, "Expected cell 0 to be empty!", ref success, ref messages);
        TestAssert(linkedQuadTree.IsEmpty(linkedQuadTree.Nodes[1]) == true, "Expected cell 1 to be emtpy!", ref success, ref messages);

        return(success);
    }