add julia set
This commit is contained in:
parent
c75fea7185
commit
ca593e6a6e
2 changed files with 65 additions and 0 deletions
25
example/example_julia.go
Normal file
25
example/example_julia.go
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"generativeart"
|
||||||
|
"math/rand"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func julia1(z complex128) complex128 {
|
||||||
|
c := complex(-0.1, 0.651)
|
||||||
|
|
||||||
|
z = z*z + c
|
||||||
|
|
||||||
|
return z
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rand.Seed(time.Now().Unix())
|
||||||
|
c := generativeart.NewCanva(800, 800, 1.5, 1.5)
|
||||||
|
c.SetIterations(800)
|
||||||
|
c.SetColorSchema(generativeart.Viridis)
|
||||||
|
c.FillBackground()
|
||||||
|
c.Draw(generativeart.NewJulia(julia1, 40))
|
||||||
|
c.ToPNG("julia.png")
|
||||||
|
}
|
40
julia.go
Normal file
40
julia.go
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
package generativeart
|
||||||
|
|
||||||
|
import "math/cmplx"
|
||||||
|
|
||||||
|
// GenFunc defines a func type used by julia set.
|
||||||
|
type GenFunc func(complex128) complex128
|
||||||
|
|
||||||
|
type julia struct {
|
||||||
|
fn GenFunc
|
||||||
|
maxz float64
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewJulia(formula GenFunc, maxz float64) *julia {
|
||||||
|
return &julia{
|
||||||
|
fn: formula,
|
||||||
|
maxz: maxz,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generative draws a julia set.
|
||||||
|
func (j *julia)Generative(c *canva) {
|
||||||
|
n := len(c.opts.colorSchema)
|
||||||
|
if n > 255 {
|
||||||
|
n = 255
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i <= c.width; i++ {
|
||||||
|
for k := 0; k <= c.height; k++ {
|
||||||
|
nit := 0
|
||||||
|
z := complex(float64(i)/float64(c.width)*2.0*c.yaixs-c.yaixs, float64(k)/float64(c.height)*2.0*c.yaixs-c.yaixs)
|
||||||
|
|
||||||
|
for cmplx.Abs(z) <= j.maxz && nit < c.opts.nIters {
|
||||||
|
z = j.fn(z)
|
||||||
|
nit += 1
|
||||||
|
}
|
||||||
|
idx := uint8(nit*255/c.opts.nIters) % uint8(n)
|
||||||
|
c.img.Set(i, k, c.opts.colorSchema[idx])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue