add janus and update readme
This commit is contained in:
parent
1a8c8fb011
commit
8b619457bf
9 changed files with 161 additions and 18 deletions
37
README.md
37
README.md
|
@ -19,6 +19,7 @@
|
|||
- Dot Line
|
||||
- Swirl
|
||||
- Point Ribbon
|
||||
- Janus
|
||||
|
||||
For these kinds of art, the package provides as many as parameters to control the appearance.
|
||||
|
||||
|
@ -43,6 +44,7 @@ NewSpiralSquare(squareNum int, rectSide, decay float64, randColor bool)
|
|||
NewSwirl(a, b, c, d, xaixs, yaixs float64)
|
||||
NewDotLine(n int, ras, canv float64, randColor bool)
|
||||
NewPointRibbon(r float64)
|
||||
NewJanus(n int, decay float64)
|
||||
```
|
||||
|
||||
## General Options
|
||||
|
@ -138,6 +140,23 @@ func main() {
|
|||
}
|
||||
```
|
||||
|
||||
### Junas
|
||||
|
||||
```go
|
||||
func main() {
|
||||
rand.Seed(time.Now().Unix())
|
||||
c := generativeart.NewCanva(500, 500)
|
||||
c.SetBackground(generativeart.Black)
|
||||
c.FillBackground()
|
||||
c.SetColorSchema(generativeart.DarkRed)
|
||||
c.SetForeground(generativeart.LightPink)
|
||||
c.Draw(generativeart.NewJanus(10, 0.2))
|
||||
c.ToPNG("janus.png")
|
||||
}
|
||||
```
|
||||
|
||||
![](images/janus.png)
|
||||
|
||||
![](images/dotline.png)
|
||||
|
||||
### Julia Set
|
||||
|
@ -194,23 +213,6 @@ func main() {
|
|||
|
||||
![](images/pointribbon.png)
|
||||
|
||||
### Swirl
|
||||
|
||||
```go
|
||||
func main() {
|
||||
rand.Seed(time.Now().Unix())
|
||||
c := generativeart.NewCanva(1600, 1600)
|
||||
c.SetBackground(generativeart.Azure)
|
||||
c.FillBackground()
|
||||
c.SetForeground(color.RGBA{113, 3, 0, 180})
|
||||
c.SetIterations(8000000)
|
||||
c.Draw(generativeart.NewSwirl(0.970, -1.899, -1.381, -1.506, 2.0, 2.0))
|
||||
c.ToPNG("swirl.png")
|
||||
}
|
||||
```
|
||||
|
||||
![](images/swirl.png)
|
||||
|
||||
### Circle Line
|
||||
|
||||
```go
|
||||
|
@ -288,3 +290,4 @@ Thanks for the following sites and repos, I got lots of ideas, inspiration, code
|
|||
- https://editor.p5js.org/kenekk1/sketches/Ly-5XYvKX
|
||||
- http://paulbourke.net/fractals/peterdejong/
|
||||
- https://editor.p5js.org/kenekk1/sketches/O44Dln5oo
|
||||
- https://openprocessing.org/sketch/1071233
|
||||
|
|
13
color.go
13
color.go
|
@ -45,6 +45,19 @@ var (
|
|||
{13, 13, 13, 255},
|
||||
}
|
||||
|
||||
DarkRed = []color.RGBA{
|
||||
{48, 19, 21, 255},
|
||||
{71, 15, 16, 255},
|
||||
{92, 10, 12, 255},
|
||||
{115, 5, 4, 255},
|
||||
{139, 0, 3, 255},
|
||||
{163, 32, 1, 255},
|
||||
{185, 66, 0, 255},
|
||||
{208, 98, 1, 255},
|
||||
{231, 133, 0, 255},
|
||||
{254, 165, 0, 255},
|
||||
}
|
||||
|
||||
Plasma = []color.RGBA{
|
||||
color.RGBA{0x0c, 0x07, 0x86, 0xff},
|
||||
color.RGBA{0x10, 0x07, 0x87, 0xff},
|
||||
|
|
18
example/example_janus.go
Normal file
18
example/example_janus.go
Normal file
|
@ -0,0 +1,18 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/jdxyw/generativeart"
|
||||
"math/rand"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
rand.Seed(time.Now().Unix())
|
||||
c := generativeart.NewCanva(500, 500)
|
||||
c.SetBackground(generativeart.Black)
|
||||
c.FillBackground()
|
||||
c.SetColorSchema(generativeart.DarkRed)
|
||||
c.SetForeground(generativeart.LightPink)
|
||||
c.Draw(generativeart.NewJanus(10, 0.2))
|
||||
c.ToPNG("janus.png")
|
||||
}
|
41
example/test.go
Normal file
41
example/test.go
Normal file
|
@ -0,0 +1,41 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/fogleman/gg"
|
||||
"github.com/jdxyw/generativeart"
|
||||
"github.com/llgcode/draw2d/draw2dimg"
|
||||
"image"
|
||||
"math/rand"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
const S = 400
|
||||
rand.Seed(time.Now().Unix())
|
||||
dest := image.NewRGBA(image.Rect(0, 0, 500, 500))
|
||||
|
||||
gc := draw2dimg.NewGraphicContext(dest)
|
||||
gc.SetStrokeColor(generativeart.Orange)
|
||||
gc.BeginPath()
|
||||
gc.MoveTo(100, 100)
|
||||
gc.QuadCurveTo(150, 50, 200, 100)
|
||||
//fmt.Println(gc.LastPoint())
|
||||
//gc.QuadCurveTo(200, 100, 300, 200)
|
||||
gc.QuadCurveTo(250, 250, 200, 400)
|
||||
gc.QuadCurveTo(100, 250, 100, 100)
|
||||
//gc.QuadCurveTo(200, 400, 100, 10)
|
||||
//gc.Close()
|
||||
gc.Stroke()
|
||||
|
||||
ctex := gg.NewContextForRGBA(dest)
|
||||
ctex.SetColor(generativeart.White)
|
||||
//ctex.DrawCircle(100, 100, 5)
|
||||
//ctex.DrawCircle(200, 400, 5)
|
||||
//ctex.DrawCircle(200, 100, 5)
|
||||
//ctex.DrawCircle(300, 200, 5)
|
||||
//ctex.DrawCircle(200, 400, 5)
|
||||
ctex.Fill()
|
||||
//gc.FillStroke()
|
||||
|
||||
draw2dimg.SaveToPngFile("test.png", dest)
|
||||
}
|
2
go.mod
2
go.mod
|
@ -4,6 +4,6 @@ go 1.16
|
|||
|
||||
require (
|
||||
github.com/fogleman/gg v1.3.0
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
|
||||
github.com/llgcode/draw2d v0.0.0-20200930101115-bfaf5d914d1e
|
||||
golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb // indirect
|
||||
)
|
||||
|
|
8
go.sum
8
go.sum
|
@ -1,7 +1,15 @@
|
|||
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
|
||||
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||
github.com/go-gl/gl v0.0.0-20180407155706-68e253793080/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk=
|
||||
github.com/go-gl/glfw v0.0.0-20180426074136-46a8d530c326/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||
github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
|
||||
github.com/llgcode/draw2d v0.0.0-20200930101115-bfaf5d914d1e h1:YRRazju3DMGuZTSWEj0nE2SCRcK3DW/qdHQ4UQx7sgs=
|
||||
github.com/llgcode/draw2d v0.0.0-20200930101115-bfaf5d914d1e/go.mod h1:mVa0dA29Db2S4LVqDYLlsePDzRJLDfdhVZiI15uY0FA=
|
||||
github.com/llgcode/ps v0.0.0-20150911083025-f1443b32eedb h1:61ndUreYSlWFeCY44JxDDkngVoI7/1MVhEl98Nm0KOk=
|
||||
github.com/llgcode/ps v0.0.0-20150911083025-f1443b32eedb/go.mod h1:1l8ky+Ew27CMX29uG+a2hNOKpeNYEQjjtiALiBlFQbY=
|
||||
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
||||
golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb h1:fqpd0EBDzlHRCjiphRR5Zo/RSWWQlWv34418dnEixWk=
|
||||
golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
|
BIN
images/janus.png
Normal file
BIN
images/janus.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
56
janus.go
Normal file
56
janus.go
Normal file
|
@ -0,0 +1,56 @@
|
|||
package generativeart
|
||||
|
||||
import (
|
||||
"github.com/fogleman/gg"
|
||||
"math"
|
||||
)
|
||||
|
||||
type janus struct {
|
||||
n int
|
||||
decay float64
|
||||
}
|
||||
|
||||
// NewJanus returns a janus object
|
||||
func NewJanus(n int, decay float64) *janus {
|
||||
return &janus{
|
||||
n: n,
|
||||
decay: decay,
|
||||
}
|
||||
}
|
||||
|
||||
// Generative draws a janus image
|
||||
// TODO not finished.
|
||||
func (j *janus) Generative(c *canva) {
|
||||
ctex := gg.NewContextForRGBA(c.img)
|
||||
//ctex.SetColor(c.opts.foreground)
|
||||
s := 220.0
|
||||
r := 0.3
|
||||
|
||||
for i := 0; i < j.n; i++ {
|
||||
//k := rand.Intn(len(c.opts.colorSchema))
|
||||
k := i
|
||||
ctex.Push()
|
||||
ctex.Translate(float64(c.width/2), float64(c.height/2))
|
||||
|
||||
//theta += rand.Float64()*math.Pi/2
|
||||
theta := RandomRangeFloat64(math.Pi/4, 3*math.Pi/4)
|
||||
x1, y1 := math.Cos(theta)*r, math.Sin(theta)*r
|
||||
x2, y2 := -x1, -y1
|
||||
|
||||
noise := RandomRangeFloat64(-math.Abs(y1), math.Abs(y1))
|
||||
y1 += noise
|
||||
y2 += noise
|
||||
|
||||
//r = r - r*j.decay
|
||||
s = s * 0.836
|
||||
ctex.Scale(s, s)
|
||||
//r = r * 0.836
|
||||
ctex.DrawArc(x1, y1, 1.0, math.Pi*3/2+theta, math.Pi*5/2+theta)
|
||||
ctex.SetColor(c.opts.colorSchema[k])
|
||||
ctex.Fill()
|
||||
ctex.DrawArc(x2, y2, 1.0, math.Pi/2+theta, math.Pi*3/2+theta)
|
||||
ctex.SetColor(c.opts.colorSchema[k])
|
||||
ctex.Fill()
|
||||
ctex.Pop()
|
||||
}
|
||||
}
|
4
utils.go
4
utils.go
|
@ -118,3 +118,7 @@ func Distance(x1, y1, x2, y2 float64) float64 {
|
|||
func RandomRangeInt(min, max int) int {
|
||||
return rand.Intn(max-min) + min
|
||||
}
|
||||
|
||||
func RandomRangeFloat64(min, max float64) float64 {
|
||||
return min + rand.Float64()*(max-min)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue