Fixed up the dotted pattern
This commit is contained in:
33
artist/checkered.go
Normal file
33
artist/checkered.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package artist
|
||||
|
||||
import "image/color"
|
||||
|
||||
// Checkered is a pattern that produces a grid of two alternating colors.
|
||||
type Checkered struct {
|
||||
First Pattern
|
||||
Second Pattern
|
||||
CellWidth, CellHeight int
|
||||
}
|
||||
|
||||
// AtWhen satisfies the Pattern interface.
|
||||
func (pattern Checkered) AtWhen (x, y, width, height int) (c color.RGBA) {
|
||||
twidth := pattern.CellWidth * 2
|
||||
theight := pattern.CellHeight * 2
|
||||
x %= twidth
|
||||
y %= theight
|
||||
if x < 0 { x += twidth }
|
||||
if y < 0 { x += theight }
|
||||
|
||||
n := 0
|
||||
if x >= pattern.CellWidth { n ++ }
|
||||
if y >= pattern.CellHeight { n ++ }
|
||||
|
||||
x %= pattern.CellWidth
|
||||
y %= pattern.CellHeight
|
||||
|
||||
if n % 2 == 0 {
|
||||
return pattern.First.AtWhen(x, y, pattern.CellWidth, pattern.CellHeight)
|
||||
} else {
|
||||
return pattern.Second.AtWhen(x, y, pattern.CellWidth, pattern.CellHeight)
|
||||
}
|
||||
}
|
||||
30
artist/dotted.go
Normal file
30
artist/dotted.go
Normal file
@@ -0,0 +1,30 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user