add color circle 2

This commit is contained in:
Yongwei Xing 2021-03-08 12:02:13 +08:00
parent fb7fc70a2f
commit 8afd28c7c7
5 changed files with 97 additions and 12 deletions

View file

@ -24,6 +24,7 @@ This package is still working in progress, more types would be added. Welcome an
- Janus - Janus
- Random Shapes - Random Shapes
- Color Circle - Color Circle
- Color Circle2
For these kinds of art, the package provides as many as parameters to control the appearance. For these kinds of art, the package provides as many as parameters to control the appearance.
@ -51,6 +52,7 @@ NewPointRibbon(r float64)
NewJanus(n int, decay float64) NewJanus(n int, decay float64)
NewRandomShape(shapeNum int) NewRandomShape(shapeNum int)
NewColorCircle(circleNum int) NewColorCircle(circleNum int)
NewColorCircle2(circleNum int)
``` ```
## General Options ## General Options
@ -117,25 +119,22 @@ func main() {
func main() { func main() {
rand.Seed(time.Now().Unix()) rand.Seed(time.Now().Unix())
colors := []color.RGBA{ colors := []color.RGBA{
{0xFF, 0xC6, 0x18, 0xFF}, {0x11, 0x60, 0xC6, 0xFF},
{0xF4, 0x25, 0x39, 0xFF}, {0xFD, 0xD9, 0x00, 0xFF},
{0x41, 0x78, 0xF4, 0xFF}, {0xF5, 0xB4, 0xF8, 0xFF},
{0xFE, 0x84, 0xFE, 0xFF}, {0xEF, 0x13, 0x55, 0xFF},
{0xFF, 0x81, 0x19, 0xFF}, {0xF4, 0x9F, 0x0A, 0xFF},
{0x56, 0xAC, 0x51, 0xFF},
{0x98, 0x19, 0xFA, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF},
} }
c := generativeart.NewCanva(1000, 1000) c := generativeart.NewCanva(800, 800)
c.SetBackground(generativeart.White) c.SetBackground(generativeart.White)
c.FillBackground() c.FillBackground()
c.SetColorSchema(colors) c.SetColorSchema(colors)
c.Draw(generativeart.NewColorCircle(500)) c.Draw(generativeart.NewColorCircle2(30))
c.ToPNG("colorcircle.png") c.ToPNG("colorcircle2.png")
} }
``` ```
![](images/colorcircle.png) ![](images/colorcircle2.png)
### Silk Smoke ### Silk Smoke

61
colorcircle2.go Normal file
View file

@ -0,0 +1,61 @@
package generativeart
import (
"github.com/fogleman/gg"
"math"
"math/rand"
)
type colorCircle2 struct {
circleNum int
}
// NewColorCircle2 returns a colorCircle2 object.
func NewColorCircle2(circleNum int) *colorCircle2 {
return &colorCircle2{
circleNum: circleNum,
}
}
// Generative draws a color circle image.
func (cc *colorCircle2) Generative(c *canva) {
ctex := gg.NewContextForRGBA(c.img)
for i := 0; i < cc.circleNum; i++ {
x := RandomRangeFloat64(0, float64(c.width))
y := RandomRangeFloat64(0, float64(c.height))
r1 := RandomRangeFloat64(50.0, float64(c.width)/4)
r2 := RandomRangeFloat64(10.0, float64(c.width)/3)
cc.circle(ctex, c, x, y, r1, r2)
if rand.Float64() < 0.3 {
col := c.opts.colorSchema[rand.Intn(len(c.opts.colorSchema))]
ctex.SetColor(col)
ctex.DrawCircle(x, y, r1/2.0)
ctex.Fill()
}
}
}
func (cc *colorCircle2) circle(ctex *gg.Context, c *canva, x, y, d, dx float64) {
col := c.opts.colorSchema[rand.Intn(len(c.opts.colorSchema))]
for j := 0.0; j < dx; j += 1.0 {
dd := d + j*2.0
alpha := int((dx / j) * 255.0)
if alpha > 255 {
alpha = 255
}
col.A = uint8(alpha)
ctex.SetColor(col)
for i := 0; i < 150; i++ {
theta := RandomRangeFloat64(0, math.Pi*2)
xx := x + dd*0.5*math.Cos(theta)
yy := y + dd*0.5*math.Sin(theta)
ctex.DrawPoint(xx, yy, 0.51)
ctex.Fill()
}
}
}

View file

@ -0,0 +1,25 @@
package main
import (
"github.com/jdxyw/generativeart"
"image/color"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().Unix())
colors := []color.RGBA{
{0x11, 0x60, 0xC6, 0xFF},
{0xFD, 0xD9, 0x00, 0xFF},
{0xF5, 0xB4, 0xF8, 0xFF},
{0xEF, 0x13, 0x55, 0xFF},
{0xF4, 0x9F, 0x0A, 0xFF},
}
c := generativeart.NewCanva(800, 800)
c.SetBackground(generativeart.White)
c.FillBackground()
c.SetColorSchema(colors)
c.Draw(generativeart.NewColorCircle2(30))
c.ToPNG("colorcircle2.png")
}

BIN
images/colorcircle2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 813 KiB