func main() {
	const maxIter = 1024

	var d = mandel.NewData(320, 200, -0.7435669, 0.1314023, 0.0022878)

	m := make(map[int]int)

	var maxV = 0
	for y := 0; y < d.MaxY; y++ {
		for x := 0; x < d.MaxX; x++ {
			dx := float64(x) * d.StepX
			dy := float64(y) * d.StepY
			iter := mandel.Iterate(d.UpperLeftRe+dx, d.UpperLeftIm+dy, maxIter)
			m[iter] = m[iter] + 1
			if m[iter] > maxV {
				maxV = m[iter]
			}
			fmt.Println(x, d.MaxY-y, iter)
		}
	}
	for x := 1; x <= maxV; x++ {
		for k, v := range m {
			if x == v {
				fmt.Println("iter", k, " -> count", v)
			}
		}
	}
}
func main() {
	var d = mandel.NewData(800, 600, -0.7435669, 0.1314023, 0.0022878)

	for subPixel := 1; subPixel <= 16; subPixel++ {
		n := fmt.Sprintf("mandel-subpixel-%03d.png", subPixel*subPixel)
		fmt.Println("Render:", n)
		pi := pngimage.NewPngimage(d.MaxX, d.MaxY, n)
		iterateSubPixelTasks(d, pi, subPixel)
		pi.Save()
	}
}
func main() {
	d := mandel.NewData(1024, 800, -0.7435669, 0.1314023, 0.0022878)
	pi := pngimage.NewPngimage(d.MaxX, d.MaxY, "mandel.png")
	it := task.IterateTasks(d, pi)

	for t := range it {
		iter := mandel.Iterate(t.CRe, t.CIm, 1024)
		c := getColor(iter)
		pi.Img.Set(t.X, d.MaxY-t.Y, c)
	}
	pi.Save()
}
func main() {
	var maxIter = 10 * 360
	var d = mandel.NewData(640, 400, -0.7435669, 0.1314023, 0.0022878)

	for colScale := 30; colScale < 360; colScale += 30 {
		for colShift := 0; colShift < colScale; colShift += 6 {

			n := fmt.Sprintf("mandel-scale-%04d-shift-%03d.png", colScale, colShift)
			fmt.Println("Render:", n)
			pi := pngimage.NewPngimage(d.MaxX, d.MaxY, n)
			it := task.IterateTasks(d, pi)

			for t := range it {
				iter := mandel.Iterate(t.CRe, t.CIm, maxIter)
				pi.Img.Set(t.X, d.MaxY-t.Y, getColor(iter, colScale, colShift))
			}
			pi.Save()
		}
	}
}
func main() {
	const maxIter = 10 * 360
	var d = mandel.NewData(640, 400, -0.7435669, 0.1314023, 0.0022878)

	var iteration [640][400]int

	fmt.Println("Iterate")
	for y := 0; y < d.MaxY; y++ {
		for x := 0; x < d.MaxX; x++ {
			dx := float64(x) * d.StepX
			dy := float64(y) * d.StepY
			iteration[x][y] = mandel.Iterate(d.UpperLeftRe+dx, d.UpperLeftIm+dy, maxIter)
		}
	}

	var err error
	var c color.Color
	for colorShift := 0; colorShift < 36; colorShift++ {
		n := fmt.Sprintf("mandel-hue-colorshift-%02d.png", colorShift)
		pi := pngimage.NewPngimage(d.MaxX, d.MaxY, n)

		for y := 0; y < d.MaxY; y++ {
			for x := 0; x < d.MaxX; x++ {
				iter := iteration[x][y]
				h := float64((iter+colorShift*10)%360) / 360.0
				if c, err = hue.Color(h); err != nil {
					panic(err)
				}

				pi.Img.Set(x, d.MaxY-y, c)
			}
		}
		fmt.Println("write file", n)
		pi.Save()
	}
}