2019-04-11 17:12:45 +00:00
|
|
|
package geom
|
|
|
|
|
|
|
|
// PointsF32 is a set of points.
|
|
|
|
type PointsF32 []PointF32
|
|
|
|
|
|
|
|
// PolF32 creates a polygon of points q.
|
|
|
|
func PolF32(q ...PointF32) PolygonF32 { return PolygonF32{Points: q} }
|
|
|
|
|
|
|
|
// PolygonF32 is defined by a set of points (floating point).
|
|
|
|
type PolygonF32 struct {
|
|
|
|
Points PointsF32
|
|
|
|
}
|
|
|
|
|
2021-08-08 23:37:16 +00:00
|
|
|
// Add adds q as a vector to all points in p.
|
|
|
|
func (p PolygonF32) Add(q PointF32) PolygonF32 {
|
|
|
|
var r = p.copy()
|
|
|
|
for i, pt := range r.Points {
|
|
|
|
r.Points[i] = pt.Add(q)
|
|
|
|
}
|
|
|
|
return r
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p PolygonF32) copy() PolygonF32 {
|
|
|
|
var q = PolygonF32{make(PointsF32, len(p.Points))}
|
|
|
|
copy(q.Points, p.Points)
|
|
|
|
return q
|
|
|
|
}
|
|
|
|
|
|
|
|
// Extend creates a new polygon based on p with one or more extra points q.
|
|
|
|
func (p PolygonF32) Extend(q ...PointF32) PolygonF32 {
|
2019-04-11 17:12:45 +00:00
|
|
|
var t = PolygonF32{make(PointsF32, len(p.Points)+len(q))}
|
|
|
|
copy(t.Points, p.Points)
|
|
|
|
copy(t.Points[len(p.Points):], q)
|
|
|
|
return t
|
|
|
|
}
|
2021-08-08 23:37:16 +00:00
|
|
|
|
|
|
|
// Mul multiplies the points of polygon p with t and returns the result.
|
|
|
|
func (p PolygonF32) Mul(t float32) PolygonF32 {
|
|
|
|
var q = p.copy()
|
|
|
|
for i, pt := range q.Points {
|
|
|
|
q.Points[i] = pt.Mul(t)
|
|
|
|
}
|
|
|
|
return q
|
|
|
|
}
|