add Rect
This commit is contained in:
parent
12575af796
commit
c8ee45dd4f
54
geometry.go
54
geometry.go
|
@ -96,3 +96,57 @@ func (u Vec) Dot(v Vec) float64 {
|
||||||
func (u Vec) Cross(v Vec) float64 {
|
func (u Vec) Cross(v Vec) float64 {
|
||||||
return u.X()*v.Y() - v.X()*u.Y()
|
return u.X()*v.Y() - v.X()*u.Y()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Rect is a 2d rectangle aligned with the axis of the coordinate system. It has a position and a size.
|
||||||
|
//
|
||||||
|
// You can manipulate the position and the size using the usual vector operations.
|
||||||
|
type Rect struct {
|
||||||
|
Pos, Size Vec
|
||||||
|
}
|
||||||
|
|
||||||
|
// R returns a new 2d rectangle with the given position (x, y) and size (w, h).
|
||||||
|
func R(x, y, w, h float64) Rect {
|
||||||
|
return Rect{
|
||||||
|
Pos: V(x, y),
|
||||||
|
Size: V(w, h),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns the string representation of a rectangle.
|
||||||
|
//
|
||||||
|
// r := pixel.R(100, 50, 200, 300)
|
||||||
|
// r.String() // returns "Rect(100, 50, 200, 300)"
|
||||||
|
// fmt.Println(r) // Rect(100, 50, 200, 300)
|
||||||
|
func (r Rect) String() string {
|
||||||
|
return fmt.Sprintf("Rect(%v, %v, %v, %v)", r.X(), r.Y(), r.W(), r.H())
|
||||||
|
}
|
||||||
|
|
||||||
|
// X returns the x coordinate of the position of a rectangle.
|
||||||
|
func (r Rect) X() float64 {
|
||||||
|
return r.Pos.X()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Y returns the y coordinate of the position of a rectangle
|
||||||
|
func (r Rect) Y() float64 {
|
||||||
|
return r.Pos.Y()
|
||||||
|
}
|
||||||
|
|
||||||
|
// W returns the width of a rectangle.
|
||||||
|
func (r Rect) W() float64 {
|
||||||
|
return r.Size.X()
|
||||||
|
}
|
||||||
|
|
||||||
|
// H returns the height of a rectangle.
|
||||||
|
func (r Rect) H() float64 {
|
||||||
|
return r.Size.Y()
|
||||||
|
}
|
||||||
|
|
||||||
|
// XYWH returns all of the four components of a rectangle in four return values.
|
||||||
|
func (r Rect) XYWH() (x, y, w, h float64) {
|
||||||
|
return r.X(), r.Y(), r.W(), r.H()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Center returns the position of the center of a rectangle.
|
||||||
|
func (r Rect) Center() Vec {
|
||||||
|
return r.Pos + r.Size.Scaled(0.5)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue