summaryrefslogtreecommitdiffstats
path: root/mandelbrot.go
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2023-08-29 08:44:32 -0700
committerRose Hogenson <rosehogenson@posteo.net>2023-08-29 08:44:32 -0700
commit539b10aea546db64e79c3a640a5b70f7b8a9bcff (patch)
treed3c71e9b177418429f3e0f26c0d99577ed68545f /mandelbrot.go
parent1fe2ad42f8bfc44ea5507023e162f79304d82023 (diff)
downloadmandelbrot-539b10aea546db64e79c3a640a5b70f7b8a9bcff.tar.zst
Use float64 instead of big.Rat.
It's actually just fine to use float64.
Diffstat (limited to 'mandelbrot.go')
-rw-r--r--mandelbrot.go66
1 files changed, 25 insertions, 41 deletions
diff --git a/mandelbrot.go b/mandelbrot.go
index 5876383..482850a 100644
--- a/mandelbrot.go
+++ b/mandelbrot.go
@@ -2,60 +2,44 @@ package main
import (
"fmt"
- "math/big"
- "time"
)
-var rat4 = big.NewRat(4, 1)
-
-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 ; 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)
+func mandelbrot(x0, y0 float64) int {
+ var x, y, x2, y2 float64
+ for i := 0; i < 1000; i++ {
+ if x2+y2 > 4 {
+ return (i-1)%6 + 1
+ }
+ y = (x+x)*y + y0
+ x = x2 - y2 + x0
+ x2 = x * x
+ y2 = y * y
}
- return (i-1)%6 + 1
+ return 0
}
-func printMandelbrot(xMin, xRange, yMin, yRange *big.Rat) error {
+func main() {
const (
+ xMin = -2.
+ xRange = 2.47
+ yMin = -1.12
+ yRange = 2.24
+
width = 80
height = 25
+
+ xStep = xRange / float64(width)
+ yStep = yRange / float64(height)
)
- 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))
- y := new(big.Rat)
- x := new(big.Rat)
- y.Set(yMin)
- for i := 0; i < height; i++ {
- x.Set(xMin)
- for j := 0; j < width; j++ {
- go func(i, j int, x, y *big.Rat) {
- grid[i*width+j] = mandelbrot(x, y)
- }(i, j, new(big.Rat).Set(x), new(big.Rat).Set(y))
- x.Add(x, xStep)
- }
- y.Add(y, yStep)
- }
- time.Sleep(time.Minute)
+ y := yMin
for i := 0; i < height; i++ {
+ x := xMin
for j := 0; j < width; j++ {
- fmt.Printf("\033[%dm ", 40+grid[i*width+j])
+ fmt.Printf("\033[4%dm ", mandelbrot(x, y))
+ x += xStep
}
fmt.Println("\033[49m")
+ y += yStep
}
- return nil
-}
-
-func main() {
- printMandelbrot(big.NewRat(-3, 2), big.NewRat(247, 100), big.NewRat(-112, 100), big.NewRat(224, 100))
}