add dots wave
This commit is contained in:
parent
3275179fc1
commit
dfd32aa0a6
6 changed files with 122 additions and 12 deletions
45
README.md
45
README.md
|
@ -36,6 +36,7 @@ This package is still working in progress. More types would be added. Welcome an
|
|||
- Ocean Fish
|
||||
- Circle Loop2
|
||||
- Pixel Hole
|
||||
- Dots Wave
|
||||
|
||||
For these kinds of art, the package provides as many parameters to control the appearance.
|
||||
|
||||
|
@ -69,6 +70,7 @@ NewContourLine(lineNum int)
|
|||
NewNoiseLine(n int)
|
||||
NewCircleLoop2(depth int)
|
||||
NewPixelHole(dotN int)
|
||||
NewDotsWave(dotsN int)
|
||||
```
|
||||
|
||||
## Docs
|
||||
|
@ -233,25 +235,28 @@ func main() {
|
|||
|
||||
![](images/pixelhole.png)
|
||||
|
||||
### Silk Smoke
|
||||
### Dots Wave
|
||||
|
||||
```go
|
||||
func main() {
|
||||
rand.Seed(time.Now().Unix())
|
||||
colors := []color.RGBA{
|
||||
{0xFF, 0xBE, 0x0B, 0xFF},
|
||||
{0xFB, 0x56, 0x07, 0xFF},
|
||||
{0xFF, 0x00, 0x6E, 0xFF},
|
||||
{0x83, 0x38, 0xEC, 0xFF},
|
||||
{0x3A, 0x86, 0xFF, 0xFF},
|
||||
}
|
||||
c := generativeart.NewCanva(500, 500)
|
||||
c.SetBackground(generativeart.Black)
|
||||
c.SetLineWidth(1.0)
|
||||
c.SetLineColor(generativeart.MediumAquamarine)
|
||||
c.SetAlpha(30)
|
||||
c.SetColorSchema(generativeart.Plasma)
|
||||
c.SetIterations(4)
|
||||
c.SetBackground(common.Black)
|
||||
c.FillBackground()
|
||||
c.Draw(generativeart.NewSilkSmoke(400, 20, 0.2, 2, 10, 30, false))
|
||||
c.ToPNG("silksmoke.png")
|
||||
c.SetColorSchema(colors)
|
||||
c.Draw(generativeart.NewDotsWave(300))
|
||||
c.ToPNG("dotswave.png")
|
||||
}
|
||||
```
|
||||
|
||||
![](images/silksmoke.png)
|
||||
![](images/dotswave.png)
|
||||
|
||||
### Contour Line
|
||||
|
||||
|
@ -338,6 +343,26 @@ func main() {
|
|||
|
||||
![](images/oceanfish.png)
|
||||
|
||||
### Silk Smoke
|
||||
|
||||
```go
|
||||
func main() {
|
||||
rand.Seed(time.Now().Unix())
|
||||
c := generativeart.NewCanva(500, 500)
|
||||
c.SetBackground(generativeart.Black)
|
||||
c.SetLineWidth(1.0)
|
||||
c.SetLineColor(generativeart.MediumAquamarine)
|
||||
c.SetAlpha(30)
|
||||
c.SetColorSchema(generativeart.Plasma)
|
||||
c.SetIterations(4)
|
||||
c.FillBackground()
|
||||
c.Draw(generativeart.NewSilkSmoke(400, 20, 0.2, 2, 10, 30, false))
|
||||
c.ToPNG("silksmoke.png")
|
||||
}
|
||||
```
|
||||
|
||||
![](images/silksmoke.png)
|
||||
|
||||
### Circle Loop
|
||||
|
||||
```go
|
||||
|
|
14
docs/doc.md
14
docs/doc.md
|
@ -150,4 +150,16 @@ cl := generativeart.NewCircleLoop2(7)
|
|||
ph := generativeart.NewPixelHole(60)
|
||||
```
|
||||
|
||||
![](../images/pixelhole.png)
|
||||
![](../images/pixelhole.png)
|
||||
|
||||
## Dots Wave
|
||||
|
||||
### parameters
|
||||
|
||||
- dotsN: The number of dots wave in the image.
|
||||
|
||||
```go
|
||||
d := generativeart.NewDotsWave(300)
|
||||
```
|
||||
|
||||
![](../images/dotswave.png)
|
48
dotswave.go
Normal file
48
dotswave.go
Normal file
|
@ -0,0 +1,48 @@
|
|||
package generativeart
|
||||
|
||||
import (
|
||||
"github.com/fogleman/gg"
|
||||
"github.com/jdxyw/generativeart/common"
|
||||
"math"
|
||||
"math/rand"
|
||||
)
|
||||
|
||||
type dotsWave struct {
|
||||
dotsN int
|
||||
}
|
||||
|
||||
// NewDotsWave returns a dotsWave object.
|
||||
func NewDotsWave(dotsN int) *dotsWave {
|
||||
return &dotsWave{
|
||||
dotsN: dotsN,
|
||||
}
|
||||
}
|
||||
|
||||
// Generative draws a dots wave images.
|
||||
func (d *dotsWave) Generative(c *canva) {
|
||||
ctex := gg.NewContextForRGBA(c.img)
|
||||
noise := common.NewPerlinNoise()
|
||||
for i := 0; i < d.dotsN; i++ {
|
||||
x := common.RandomRangeFloat64(-0.1, 1.1) * float64(c.width)
|
||||
y := common.RandomRangeFloat64(-0.1, 1.1) * float64(c.height)
|
||||
|
||||
num := common.RandomRangeFloat64(100, 1000)
|
||||
r := rand.Float64() * float64(c.width) * 0.15 * rand.Float64()
|
||||
ind := common.RandomRangeFloat64(1, 8)
|
||||
|
||||
ctex.Push()
|
||||
ctex.Translate(x, y)
|
||||
ctex.Rotate(float64(rand.Intn(8)) * math.Pi / 4)
|
||||
rand.Shuffle(len(c.opts.colorSchema), func(i, j int) {
|
||||
c.opts.colorSchema[i], c.opts.colorSchema[j] = c.opts.colorSchema[j], c.opts.colorSchema[i]
|
||||
})
|
||||
for j := 0.0; j < num; j += ind {
|
||||
s := float64(c.width) * 0.15 * common.RandomRangeFloat64(0, common.RandomRangeFloat64(0, common.RandomRangeFloat64(0, common.RandomRangeFloat64(0, common.RandomRangeFloat64(0, common.RandomRangeFloat64(0, rand.Float64()))))))
|
||||
ci := int(float64(len(c.opts.colorSchema)) * noise.Noise3D(j*0.01, x, y))
|
||||
ctex.SetColor(c.opts.colorSchema[ci])
|
||||
ctex.DrawCircle(j, r*math.Sin(j*0.05), s*2/3)
|
||||
ctex.Fill()
|
||||
}
|
||||
ctex.Pop()
|
||||
}
|
||||
}
|
26
example/example_dotswave.go
Normal file
26
example/example_dotswave.go
Normal file
|
@ -0,0 +1,26 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/jdxyw/generativeart"
|
||||
"github.com/jdxyw/generativeart/common"
|
||||
"image/color"
|
||||
"math/rand"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
rand.Seed(time.Now().Unix())
|
||||
colors := []color.RGBA{
|
||||
{0xFF, 0xBE, 0x0B, 0xFF},
|
||||
{0xFB, 0x56, 0x07, 0xFF},
|
||||
{0xFF, 0x00, 0x6E, 0xFF},
|
||||
{0x83, 0x38, 0xEC, 0xFF},
|
||||
{0x3A, 0x86, 0xFF, 0xFF},
|
||||
}
|
||||
c := generativeart.NewCanva(500, 500)
|
||||
c.SetBackground(common.Black)
|
||||
c.FillBackground()
|
||||
c.SetColorSchema(colors)
|
||||
c.Draw(generativeart.NewDotsWave(300))
|
||||
c.ToPNG("dotswave.png")
|
||||
}
|
BIN
images/dotswave.png
Normal file
BIN
images/dotswave.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 191 KiB |
|
@ -23,7 +23,6 @@ func NewPixelHole(dotN int) *pixelHole {
|
|||
// Generative draws a pixel hole images.
|
||||
func (p *pixelHole) Generative(c *canva) {
|
||||
ctex := gg.NewContextForRGBA(c.img)
|
||||
//ctex.Translate(float64(c.width)/2, float64(c.height)/2)
|
||||
for i := 0.0; i < float64(c.opts.nIters); i += 1.0 {
|
||||
ctex.Push()
|
||||
ctex.Translate(float64(c.width)/2, float64(c.height)/2)
|
||||
|
|
Loading…
Reference in a new issue