generativeart/arts/pointRibbon.go

38 lines
895 B
Go

package arts
import (
"github.com/fogleman/gg"
"github.com/jdxyw/generativeart"
"math"
)
type pointRibbon struct {
r float64
}
// NewPointRibbon returns a pointRibbon object.
func NewPointRibbon(r float64) *pointRibbon {
return &pointRibbon{
r: r,
}
}
// Generative draws a point ribbon image.
// TODO: make the point as parameters.
func (s *pointRibbon) Generative(c *generativeart.Canva) {
ctex := gg.NewContextForRGBA(c.Img())
ctex.SetLineWidth(c.Opts().LineWidth())
var t float64
var dt = 0.0001
for i := 0; i < c.Opts().NIters(); i++ {
delta := 2.0*s.r*math.Cos(4.0*dt*t) + s.r*math.Cos(t)
ctex.SetRGBA255(int(delta), int(2*s.r*math.Sin(t)-s.r*math.Cos(3*dt*t)), 100, 10)
ctex.DrawPoint(2*s.r*math.Sin(2*t*dt)+s.r*math.Cos(t*dt)+float64(c.Width()/2),
2*s.r*math.Sin(t*dt)-s.r*math.Sin(5*t)+float64(c.Height()/2), 1.0)
ctex.Stroke()
t += 0.01
dt += 0.1
}
}