Added Inset and Add method to RectangleF
This commit is contained in:
parent
fd7d29064c
commit
20f0bf7b1f
@ -1,6 +1,7 @@
|
|||||||
package geom
|
package geom
|
||||||
|
|
||||||
// RectangleF is defined by two points, the minimum and maximum (floating point).
|
// RectangleF is defined by two points, the minimum and maximum (floating point).
|
||||||
|
// Tries to use the same interface as the image.Rectangle but uses float64 instead of int.
|
||||||
type RectangleF struct {
|
type RectangleF struct {
|
||||||
Min, Max PointF
|
Min, Max PointF
|
||||||
}
|
}
|
||||||
@ -16,6 +17,34 @@ func RectF(x0, y0, x1, y1 float64) RectangleF {
|
|||||||
return RectangleF{PtF(x0, y0), PtF(x1, y1)}
|
return RectangleF{PtF(x0, y0), PtF(x1, y1)}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add translates rectangle r by point p.
|
||||||
|
func (r RectangleF) Add(p PointF) RectangleF {
|
||||||
|
return RectangleF{
|
||||||
|
PointF{r.Min.X + p.X, r.Min.Y + p.Y},
|
||||||
|
PointF{r.Max.X + p.X, r.Max.Y + p.Y},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inset returns the rectangle r inset by n. The resulting rectangle will never have
|
||||||
|
// a negative size.
|
||||||
|
func (r RectangleF) Inset(n float64) RectangleF {
|
||||||
|
if r.Dx() < 2*n {
|
||||||
|
r.Min.X = (r.Min.X + r.Max.X) / 2
|
||||||
|
r.Max.X = r.Min.X
|
||||||
|
} else {
|
||||||
|
r.Min.X += n
|
||||||
|
r.Max.X -= n
|
||||||
|
}
|
||||||
|
if r.Dy() < 2*n {
|
||||||
|
r.Min.Y = (r.Min.Y + r.Max.Y) / 2
|
||||||
|
r.Max.Y = r.Min.Y
|
||||||
|
} else {
|
||||||
|
r.Min.Y += n
|
||||||
|
r.Max.Y -= n
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
// Dx returns the width of r.
|
// Dx returns the width of r.
|
||||||
func (r RectangleF) Dx() float64 {
|
func (r RectangleF) Dx() float64 {
|
||||||
return r.Max.X - r.Min.X
|
return r.Max.X - r.Min.X
|
||||||
|
Loading…
Reference in New Issue
Block a user