56 lines
999 B
Go
56 lines
999 B
Go
package main
|
|
|
|
import (
|
|
"image/color"
|
|
"math"
|
|
)
|
|
|
|
type Function interface {
|
|
Func(float64) uint16
|
|
}
|
|
|
|
type ColorArray struct {
|
|
img []color.Color
|
|
}
|
|
|
|
func NewColorArray() *ColorArray {
|
|
ca := &ColorArray{make([]color.Color, screenWidth*screenHeight)}
|
|
ca.Clear(color.Black)
|
|
return ca
|
|
}
|
|
|
|
func (ca *ColorArray) Clear(c color.Color) {
|
|
for i := 0; i < len(ca.img); i++ {
|
|
ca.img[i] = c
|
|
}
|
|
}
|
|
|
|
func (ca *ColorArray) At(x, y int) color.Color {
|
|
position := x + (y * screenHeight)
|
|
if position > len(ca.img) || position < 0 {
|
|
return color.Black
|
|
} else {
|
|
return ca.img[position]
|
|
}
|
|
}
|
|
|
|
func (ca *ColorArray) Set(x, y int, c color.Color) {
|
|
position := x + (y * screenHeight)
|
|
if position < len(ca.img) && position >= 0 {
|
|
ca.img[position] = c
|
|
}
|
|
}
|
|
|
|
type Position struct {
|
|
X int
|
|
Y int
|
|
}
|
|
|
|
func (p *Position) Length() float64 {
|
|
return math.Sqrt(float64(p.X)*float64(p.X) + float64(p.Y)*float64(p.Y))
|
|
}
|
|
|
|
func (p *Position) Dist(P *Position) float64 {
|
|
return (&Position{p.X - P.X, p.Y - P.Y}).Length()
|
|
}
|