package model import ( "image" "image/color" "image/draw" ) type Line struct { Start image.Point End image.Point Width int Color color.Color } func (l *Line) ToSprite() *Sprite { img := image.NewRGBA(image.Rect(0, 0, l.End.X-l.Start.X, l.End.Y-l.Start.Y)) draw.Draw(img, image.Rect(0, 0, l.End.X-l.Start.X, l.End.Y-l.Start.Y), &image.Uniform{l.Color}, image.Point{}, draw.Src) return &Sprite{ Position: l.Start, Image: img, } } type ProjectMatrix struct { Matrix [2][2]float64 } func (p *ProjectMatrix) ProjectPoint(point image.Point) image.Point { return image.Point{ X: int(p.Matrix[0][0]*float64(point.X) + p.Matrix[0][1]*float64(point.Y)), Y: int(p.Matrix[1][0]*float64(point.X) + p.Matrix[1][1]*float64(point.Y)), } } func (p *ProjectMatrix) ProjectLine(line Line) Line { return Line{ Start: p.ProjectPoint(line.Start), End: p.ProjectPoint(line.End), } }