summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mandelbrot.go66
1 files 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() {