Example #1
0
        //最大辺
        private Cube5 Select()
        {
            Cube5 selectedCube = Cubes[0];

            if (Cubes.Count == 1)
            {
                return(selectedCube);
            }

            for (int i = 1; i < Cubes.Count; i++)
            {
                if (selectedCube.MaxSideLength < Cubes[i].MaxSideLength)
                {
                    selectedCube = Cubes[i];
                }
            }
            return(selectedCube);
        }
Example #2
0
        private void Button5_Click(object sender, RoutedEventArgs e)
        {
            var sw = new Stopwatch();

            sw.Start();
            var rgbArray = MakeRgbArray(OriginPixels);

            sw.Stop();
            MessageBox.Show(sw.ElapsedMilliseconds.ToString());

            sw.Restart();
            var neko = new Cube5(rgbArray.red, rgbArray.green, rgbArray.blue);

            sw.Stop();
            MessageBox.Show(sw.ElapsedMilliseconds.ToString());

            sw.Restart();
            var inu = neko.Bunkatu(18);

            sw.Stop();
            MessageBox.Show(sw.ElapsedMilliseconds.ToString());
        }
Example #3
0
        public List <Cube5> Bunkatu(int spritCount)
        {
            Cube5       selectedCube = Select();
            List <byte> vs1R         = new List <byte>();
            List <byte> vs1G         = new List <byte>();
            List <byte> vs1B         = new List <byte>();
            List <byte> vs2R         = new List <byte>();
            List <byte> vs2G         = new List <byte>();
            List <byte> vs2B         = new List <byte>();
            int         mid;//中間値は切り捨てint

            byte[] keyArray;
            if (selectedCube.SpritKeyColor == MaxSideColor.Red)
            {
                keyArray = selectedCube.RedArray;
                mid      = (selectedCube.MaxR + selectedCube.MinR) / 2;
            }
            else if (selectedCube.SpritKeyColor == MaxSideColor.Green)
            {
                keyArray = selectedCube.GreArray;
                mid      = (selectedCube.MaxG + selectedCube.MinG) / 2;
            }
            else
            {
                keyArray = selectedCube.BluArray;
                mid      = (selectedCube.MaxB + selectedCube.MinB) / 2;
            }
            //中間値で分割
            for (int i = 0; i < selectedCube.ColorCount; i++)
            {
                if (mid > keyArray[i])
                {
                    vs1R.Add(selectedCube.RedArray[i]);
                    vs1G.Add(selectedCube.GreArray[i]);
                    vs1B.Add(selectedCube.BluArray[i]);
                }
                else
                {
                    vs2R.Add(selectedCube.RedArray[i]);
                    vs2G.Add(selectedCube.GreArray[i]);
                    vs2B.Add(selectedCube.BluArray[i]);
                }
            }
            //2つに分割できなかったら、今のCubeを諦めて別のCubeで試行
            if (vs1B.Count == 0 || vs2B.Count == 0)
            {
                return(Cubes);
            }
            //2つに分割できたら
            else
            {
                //分割した元Cubeはリストから削除、元Cubeから分割した2つのCubeをリストに追加
                Cubes.Remove(selectedCube);
                var c1 = new Cube5(vs1R.ToArray(), vs1G.ToArray(), vs1B.ToArray());
                var c2 = new Cube5(vs2R.ToArray(), vs2G.ToArray(), vs2B.ToArray());
                Cubes.Add(c1);
                Cubes.Add(c2);
                //指定分割数になるまで繰り返す
                if (Cubes.Count < spritCount)
                {
                    Bunkatu(spritCount);
                }
            }
            return(Cubes);
        }