To generate fractal images, such as the Mandelbrot set, in Go, you can use the built-in image and color packages. Here's an example code that generates and saves a Mandelbrot set image:
package main
import (
"image"
"image/color"
"image/png"
"math/cmplx"
"os"
)
func main() {
width, height := 1024, 1024
img := image.NewRGBA(image.Rect(0, 0, width, height))
for x := 0; x < width; x++ {
for y := 0; y < height; y++ {
// Normalize coordinates to the range of (-2.5, 1) for x-axis and (-1, 1) for y-axis
xi := 3.5 * float64(x)/float64(width) - 2.5
yi := 2.0 * float64(y)/float64(height) - 1.0
// Compute Mandelbrot iterations
iterations := computeMandelbrot(xi, yi)
// Map number of iterations to a color value
col := color.Gray{uint8(iterations % 256)}
// Set color for the pixel
img.Set(x, y, col)
}
}
// Save the image to a file
file, err := os.Create("mandelbrot.png")
if err != nil {
panic(err)
}
defer file.Close()
png.Encode(file, img)
}
// computeMandelbrot returns the number of iterations for a given complex number (xi + yi).
// If the number escapes to infinity within a set threshold, the function returns the number of iterations it took to escape.
// Otherwise, it returns the maximum number of iterations.
func computeMandelbrot(xi, yi float64) int {
const maxIterations = 1000
const threshold = 2.0
z := complex(0, 0)
c := complex(xi, yi)
for i := 0; i < maxIterations; i++ {
z = z*z + c
if cmplx.Abs(z) > threshold {
return i
}
}
return maxIterations
}
This code generates a 1024x1024 pixel Mandelbrot set and saves it to a PNG image file named "mandelbrot.png" in the same directory. You can adjust the image dimensions, maximum iterations, and threshold as per your requirements.