31 lines
753 B
Go
31 lines
753 B
Go
|
package artist
|
||
|
|
||
|
import "math"
|
||
|
import "image/color"
|
||
|
|
||
|
// Dotted is a pattern that produces a grid of circles.
|
||
|
type Dotted struct {
|
||
|
Background Pattern
|
||
|
Foreground Pattern
|
||
|
Size int
|
||
|
Spacing int
|
||
|
}
|
||
|
|
||
|
// AtWhen satisfies the Pattern interface.
|
||
|
func (pattern Dotted) AtWhen (x, y, width, height int) (c color.RGBA) {
|
||
|
xm := x % pattern.Spacing
|
||
|
ym := y % pattern.Spacing
|
||
|
if xm < 0 { xm += pattern.Spacing }
|
||
|
if ym < 0 { xm += pattern.Spacing }
|
||
|
radius := float64(pattern.Size) / 2
|
||
|
spacing := float64(pattern.Spacing) / 2 - 0.5
|
||
|
xf := float64(xm) - spacing
|
||
|
yf := float64(ym) - spacing
|
||
|
|
||
|
if math.Sqrt(xf * xf + yf * yf) > radius {
|
||
|
return pattern.Background.AtWhen(x, y, width, height)
|
||
|
} else {
|
||
|
return pattern.Foreground.AtWhen(x, y, width, height)
|
||
|
}
|
||
|
}
|