From 1fe2ad42f8bfc44ea5507023e162f79304d82023 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Tue, 29 Aug 2023 07:48:25 -0700 Subject: Simplify the code. I removed the dependency on term by just always printing a small image. It's more of a proof-of-concept. --- mandelbrot.go | 66 +++++++++++++++-------------------------------------------- 1 file changed, 17 insertions(+), 49 deletions(-) diff --git a/mandelbrot.go b/mandelbrot.go index 27d7bdb..5876383 100644 --- a/mandelbrot.go +++ b/mandelbrot.go @@ -2,73 +2,37 @@ package main import ( "fmt" - "golang.org/x/term" - "log" "math/big" "time" ) -type color int +var rat4 = big.NewRat(4, 1) -const ( - black color = iota - red - yellow - green - cyan - blue - magenta -) - -func (c color) print() { - var i int - switch c { - case red: - i = 41 - case yellow: - i = 43 - case green: - i = 42 - case cyan: - i = 46 - case blue: - i = 44 - case magenta: - i = 45 - default: - i = 40 - } - if _, err := fmt.Printf("\033[%dm ", i); err != nil { - log.Fatal(err) - } -} - -var rat2 = big.NewRat(2, 1) - -func mandelbrot(x0, y0 *big.Rat) color { +func mandelbrot(x0, y0 *big.Rat) int { x := new(big.Rat) y := new(big.Rat) x2 := new(big.Rat) y2 := new(big.Rat) + temp := new(big.Rat) i := 0 - for ; x2.Cmp(rat2) <= 0 && y2.Cmp(rat2) <= 0; i++ { + for ; temp.Add(x2, y2).Cmp(rat4) <= 0; i++ { y.Add(y, y).Mul(y, x).Add(y, y0) x.Sub(x2, y2).Add(x, x0) x2.Mul(x, x) y2.Mul(y, y) } - return color(i-1)%magenta + 1 + return (i-1)%6 + 1 } -func printMandelbrot(xMin, xRange, yMin, yRange *big.Rat) { - width, height, err := term.GetSize(0) - if err != nil { - log.Fatalf("Terminal size: %s.", err) - } +func printMandelbrot(xMin, xRange, yMin, yRange *big.Rat) error { + const ( + width = 80 + height = 25 + ) + grid := make([]int, width*height) xStep := new(big.Rat).Quo(xRange, big.NewRat(int64(width), 1)) yStep := new(big.Rat).Quo(yRange, big.NewRat(int64(height), 1)) - grid := make([]color, width*height) y := new(big.Rat) x := new(big.Rat) y.Set(yMin) @@ -83,9 +47,13 @@ func printMandelbrot(xMin, xRange, yMin, yRange *big.Rat) { y.Add(y, yStep) } time.Sleep(time.Minute) - for _, c := range grid { - c.print() + for i := 0; i < height; i++ { + for j := 0; j < width; j++ { + fmt.Printf("\033[%dm ", 40+grid[i*width+j]) + } + fmt.Println("\033[49m") } + return nil } func main() { -- cgit v1.3.1