예제 #1
0
        public static void PolynomialList()
        {
            //左边是系数,右边是次幂
            // string[] leftPolys = {"2,1492","10,1000","5,14","5,1","1,0"};
            // string[] rightPolys = {"3,1990","-2,1492","11,1","5,0"};
            string[] leftPolys  = { "2,1492", "10,1000", "5,14", "5,1", "1,0" };
            string[] rightPolys = { "3,1990", "-2,1492", "11,1", "5,0" };


            PolyList left  = new PolyList();
            PolyList right = new PolyList();

            foreach (var poly in leftPolys)
            {
                string[] param       = poly.Split(',');
                int      coefficient = int.Parse(param[0]);
                int      exponent    = int.Parse(param[1]);

                PolyNode node = new PolyNode();

                node.Polynomial.Coefficient = coefficient;
                node.Polynomial.Exponent    = exponent;

                left.Append(node);
            }

            foreach (var poly in rightPolys)
            {
                string[] param       = poly.Split(',');
                int      coefficient = int.Parse(param[0]);
                int      exponent    = int.Parse(param[1]);

                PolyNode node = new PolyNode();

                node.Polynomial.Coefficient = coefficient;
                node.Polynomial.Exponent    = exponent;

                right.Append(node);
            }

            PolyList sum = left + right;

            sum.PrintList();
            System.Console.WriteLine("multiply:");
            PolyList multi = left * right;

            multi.PrintList();
        }
예제 #2
0
    private int[] buildIndices(PolyList polys, out bool isTriangles)
    {
        int quadCount = 0;
        int triCount  = 0;

        for (int i = 0; i < polys.count; i++)
        {
            if (polys.values[i].Count == 5)
            {
                triCount++;
            }
            if (polys.values[i].Count == 6)
            {
                quadCount++;
            }
        }

        Debug.Log(quadCount + " quads, and " + triCount + " triangles.");
        int[] indices;
        if (quadCount == polys.count)
        {
            indices = new int[quadCount * 4];
            for (int i = 0; i < polys.count; i++)
            {
                indices[i * 4 + 0] = polys.values[i][2];
                indices[i * 4 + 1] = polys.values[i][3];
                indices[i * 4 + 2] = polys.values[i][4];
                indices[i * 4 + 3] = polys.values[i][5];
            }
        }
        else if (triCount == polys.count)
        {
            indices = new int[triCount * 3];
            for (int i = 0; i < polys.count; i++)
            {
                indices[i * 4 + 0] = polys.values[i][2];
                indices[i * 4 + 1] = polys.values[i][3];
                indices[i * 4 + 2] = polys.values[i][4];
            }
        }
        else
        {
            int baseCount    = quadCount * 6 + triCount * 3;
            int currentIndex = 0;

            indices = new int[baseCount];

            for (int i = 0; i < polys.count; i++)
            {
                if (polys.values[i].Count == 5)
                {
                    indices[currentIndex++] = polys.values[i][2];
                    indices[currentIndex++] = polys.values[i][3];
                    indices[currentIndex++] = polys.values[i][4];
                }
                else
                {
                    indices[currentIndex++] = polys.values[i][2];
                    indices[currentIndex++] = polys.values[i][3];
                    indices[currentIndex++] = polys.values[i][5];

                    indices[currentIndex++] = polys.values[i][5];
                    indices[currentIndex++] = polys.values[i][3];
                    indices[currentIndex++] = polys.values[i][4];
                }
            }
        }

        isTriangles = triCount != 0;
        return(indices);
    }