add ocean fish
This commit is contained in:
parent
35cb465736
commit
a1f1c00a3a
5 changed files with 162 additions and 18 deletions
59
README.md
59
README.md
|
@ -34,6 +34,7 @@ This package is still working in progress. More types would be added. Welcome an
|
||||||
- Circle Grid
|
- Circle Grid
|
||||||
- Contour Line
|
- Contour Line
|
||||||
- Noise Line
|
- Noise Line
|
||||||
|
- Ocean Fish
|
||||||
|
|
||||||
For these kinds of art, the package provides as many parameters to control the appearance.
|
For these kinds of art, the package provides as many parameters to control the appearance.
|
||||||
|
|
||||||
|
@ -245,6 +246,46 @@ func main() {
|
||||||
```
|
```
|
||||||
|
|
||||||
![](images/noiseline.png)
|
![](images/noiseline.png)
|
||||||
|
|
||||||
|
### Dot Line
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
rand.Seed(time.Now().Unix())
|
||||||
|
c := generativeart.NewCanva(2080, 2080)
|
||||||
|
c.SetBackground(color.RGBA{230, 230, 230, 255})
|
||||||
|
c.SetLineWidth(10)
|
||||||
|
c.SetIterations(4000)
|
||||||
|
c.SetColorSchema(generativeart.Plasma)
|
||||||
|
c.FillBackground()
|
||||||
|
c.Draw(generativeart.NewDotLine(100, 20, 50, false))
|
||||||
|
c.ToPNG("dotline.png")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
![](images/dotline.png)
|
||||||
|
|
||||||
|
### Ocean Fish
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
rand.Seed(time.Now().Unix())
|
||||||
|
colors := []color.RGBA{
|
||||||
|
{0xCF, 0x2B, 0x34, 0xFF},
|
||||||
|
{0xF0, 0x8F, 0x46, 0xFF},
|
||||||
|
{0xF0, 0xC1, 0x29, 0xFF},
|
||||||
|
{0x19, 0x6E, 0x94, 0xFF},
|
||||||
|
{0x35, 0x3A, 0x57, 0xFF},
|
||||||
|
}
|
||||||
|
c := generativeart.NewCanva(500, 500)
|
||||||
|
c.SetColorSchema(colors)
|
||||||
|
c.Draw(generativeart.NewOceanFish(100, 8))
|
||||||
|
c.ToPNG("oceanfish.png")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
![](images/oceanfish.png)
|
||||||
|
|
||||||
### Circle Loop
|
### Circle Loop
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
@ -264,23 +305,6 @@ func main() {
|
||||||
|
|
||||||
![](images/circleloop.png)
|
![](images/circleloop.png)
|
||||||
|
|
||||||
### Dot Line
|
|
||||||
|
|
||||||
```go
|
|
||||||
func main() {
|
|
||||||
rand.Seed(time.Now().Unix())
|
|
||||||
c := generativeart.NewCanva(2080, 2080)
|
|
||||||
c.SetBackground(color.RGBA{230, 230, 230, 255})
|
|
||||||
c.SetLineWidth(10)
|
|
||||||
c.SetIterations(4000)
|
|
||||||
c.SetColorSchema(generativeart.Plasma)
|
|
||||||
c.FillBackground()
|
|
||||||
c.Draw(generativeart.NewDotLine(100, 20, 50, false))
|
|
||||||
c.ToPNG("dotline.png")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
![](images/dotline.png)
|
|
||||||
|
|
||||||
### Julia Set
|
### Julia Set
|
||||||
|
|
||||||
|
@ -382,3 +406,4 @@ Thanks for the following sites and repos, I got lots of ideas, inspiration, code
|
||||||
- https://openprocessing.org/sketch/1071233
|
- https://openprocessing.org/sketch/1071233
|
||||||
- https://twitter.com/okazz_
|
- https://twitter.com/okazz_
|
||||||
- https://openprocessing.org/sketch/738638
|
- https://openprocessing.org/sketch/738638
|
||||||
|
- https://openprocessing.org/sketch/1102157
|
17
docs/doc.md
17
docs/doc.md
|
@ -107,4 +107,19 @@ julia := generativeart.NewJulia(julia1, 40, 1.5, 1.5)
|
||||||
nl := generativeart.NewNoiseLine(1000)
|
nl := generativeart.NewNoiseLine(1000)
|
||||||
```
|
```
|
||||||
|
|
||||||
![](../images/noiseline.png)
|
![](../images/noiseline.png)
|
||||||
|
|
||||||
|
## Ocean Fish
|
||||||
|
|
||||||
|
`Ocean Fish` draws a ocean and some fishes in the center.
|
||||||
|
|
||||||
|
### parameters
|
||||||
|
|
||||||
|
- lineNum: The number of the line used to simulate the ocean wave.
|
||||||
|
- fishNum: The number of fish.
|
||||||
|
|
||||||
|
```go
|
||||||
|
o := generativeart.NewOceanFish(100, 8)
|
||||||
|
```
|
||||||
|
|
||||||
|
![](../images/oceanfish.png)
|
30
example/example_oceanfish.go
Normal file
30
example/example_oceanfish.go
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/jdxyw/generativeart"
|
||||||
|
"image/color"
|
||||||
|
"math/rand"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
rand.Seed(time.Now().Unix())
|
||||||
|
//colors := []color.RGBA{
|
||||||
|
// {0x05, 0x1F, 0x34, 0xFF},
|
||||||
|
// {0x02, 0x74, 0x95, 0xFF},
|
||||||
|
// {0x01, 0xA9, 0xC1, 0xFF},
|
||||||
|
// {0xBA, 0xD6, 0xDB, 0xFF},
|
||||||
|
// {0xF4, 0xF5, 0xF5, 0xFF},
|
||||||
|
//}
|
||||||
|
colors := []color.RGBA{
|
||||||
|
{0xCF, 0x2B, 0x34, 0xFF},
|
||||||
|
{0xF0, 0x8F, 0x46, 0xFF},
|
||||||
|
{0xF0, 0xC1, 0x29, 0xFF},
|
||||||
|
{0x19, 0x6E, 0x94, 0xFF},
|
||||||
|
{0x35, 0x3A, 0x57, 0xFF},
|
||||||
|
}
|
||||||
|
c := generativeart.NewCanva(500, 500)
|
||||||
|
c.SetColorSchema(colors)
|
||||||
|
c.Draw(generativeart.NewOceanFish(100, 8))
|
||||||
|
c.ToPNG("oceanfish.png")
|
||||||
|
}
|
BIN
images/oceanfish.png
Normal file
BIN
images/oceanfish.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 78 KiB |
74
oceanfish.go
Normal file
74
oceanfish.go
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
package generativeart
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/fogleman/gg"
|
||||||
|
"github.com/jdxyw/generativeart/common"
|
||||||
|
"math"
|
||||||
|
"math/rand"
|
||||||
|
)
|
||||||
|
|
||||||
|
type oceanFish struct {
|
||||||
|
lineNum int
|
||||||
|
fishNum int
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewOceanFish returns a oceanFish object.
|
||||||
|
func NewOceanFish(lineNum, fishNum int) *oceanFish {
|
||||||
|
return &oceanFish{
|
||||||
|
lineNum: lineNum,
|
||||||
|
fishNum: fishNum,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generative draws a ocean and fish images.
|
||||||
|
func (o *oceanFish) Generative(c *canva) {
|
||||||
|
ctex := gg.NewContextForRGBA(c.img)
|
||||||
|
|
||||||
|
o.drawlines(ctex, c)
|
||||||
|
|
||||||
|
for i := 0; i < o.fishNum; i++ {
|
||||||
|
ctex.Push()
|
||||||
|
|
||||||
|
theta := float64(360*i) / float64(o.fishNum)
|
||||||
|
r := float64(c.width) / 4.0
|
||||||
|
|
||||||
|
ctex.Push()
|
||||||
|
ctex.Translate(float64(c.width/2)+r*math.Cos(gg.Radians(theta)), float64(c.height/2)+r*math.Sin(gg.Radians(theta)))
|
||||||
|
ctex.Rotate(gg.Radians(theta + 90))
|
||||||
|
o.drawfish(ctex, c, 0, 0, float64(c.width)/10)
|
||||||
|
ctex.Pop()
|
||||||
|
|
||||||
|
ctex.Clip()
|
||||||
|
o.drawlines(ctex, c)
|
||||||
|
ctex.Pop()
|
||||||
|
ctex.ClearPath()
|
||||||
|
ctex.ResetClip()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *oceanFish) drawlines(ctx *gg.Context, c *canva) {
|
||||||
|
for i := 0; i < o.lineNum; i++ {
|
||||||
|
cl := c.opts.colorSchema[rand.Intn(len(c.opts.colorSchema))]
|
||||||
|
ctx.SetColor(cl)
|
||||||
|
ctx.SetLineWidth(common.RandomRangeFloat64(3, 20))
|
||||||
|
y := rand.Float64() * float64(c.height)
|
||||||
|
ctx.DrawLine(0, y+common.RandomRangeFloat64(-50, 50), float64(c.width), y+common.RandomRangeFloat64(-50, 50))
|
||||||
|
ctx.Stroke()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *oceanFish) drawfish(ctex *gg.Context, c *canva, ox, oy, r float64) {
|
||||||
|
ctex.Push()
|
||||||
|
ctex.Translate(ox, oy)
|
||||||
|
ctex.Rotate(gg.Radians(180))
|
||||||
|
|
||||||
|
ctex.MoveTo(r*math.Cos(gg.Radians(0))-r*math.Pow(math.Sin(gg.Radians(0)), 2)/math.Sqrt(2),
|
||||||
|
r*math.Cos(gg.Radians(0))*math.Sin(gg.Radians(0)))
|
||||||
|
for theta := 1.0; theta < 361.0; theta += 1.0 {
|
||||||
|
x := r*math.Cos(gg.Radians(theta)) - r*math.Pow(math.Sin(gg.Radians(theta)), 2)/math.Sqrt(2)
|
||||||
|
y := r * math.Cos(gg.Radians(theta)) * math.Sin(gg.Radians(theta))
|
||||||
|
ctex.LineTo(x, y)
|
||||||
|
}
|
||||||
|
ctex.ClosePath()
|
||||||
|
ctex.Pop()
|
||||||
|
}
|
Loading…
Reference in a new issue