//最大辺 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); }
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()); }
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); }