~eliasnaur/gio

gio/f32/f32.go -rw-r--r-- 2.4 KiB View raw
efce78d4metaclips example/kitchen: add ProgressBar example 7 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// SPDX-License-Identifier: Unlicense OR MIT

/*
Package f32 is a float32 implementation of package image's
Point and Rectangle.

The coordinate space has the origin in the top left
corner with the axes extending right and down.
*/
package f32

// A Point is a two dimensional point.
type Point struct {
	X, Y float32
}

// A Rectangle contains the points (X, Y) where Min.X <= X < Max.X,
// Min.Y <= Y < Max.Y.
type Rectangle struct {
	Min, Max Point
}

// Add return the point p+p2.
func (p Point) Add(p2 Point) Point {
23 references
return Point{X: p.X + p2.X, Y: p.Y + p2.Y} } // Sub returns the vector p-p2. func (p Point) Sub(p2 Point) Point {
16 references
return Point{X: p.X - p2.X, Y: p.Y - p2.Y} } // Mul returns p scaled by s. func (p Point) Mul(s float32) Point {
20 references
return Point{X: p.X * s, Y: p.Y * s} } // Size returns r's width and height. func (r Rectangle) Size() Point {
1 reference
return Point{X: r.Dx(), Y: r.Dy()} } // Dx returns r's width. func (r Rectangle) Dx() float32 {
4 references
return r.Max.X - r.Min.X } // Dy returns r's Height. func (r Rectangle) Dy() float32 {
4 references
return r.Max.Y - r.Min.Y } // Intersect returns the intersection of r and s. func (r Rectangle) Intersect(s Rectangle) Rectangle {
2 references
if r.Min.X < s.Min.X { r.Min.X = s.Min.X } if r.Min.Y < s.Min.Y { r.Min.Y = s.Min.Y } if r.Max.X > s.Max.X { r.Max.X = s.Max.X } if r.Max.Y > s.Max.Y { r.Max.Y = s.Max.Y } return r } // Union returns the union of r and s. func (r Rectangle) Union(s Rectangle) Rectangle {
1 reference
if r.Min.X > s.Min.X { r.Min.X = s.Min.X } if r.Min.Y > s.Min.Y { r.Min.Y = s.Min.Y } if r.Max.X < s.Max.X { r.Max.X = s.Max.X } if r.Max.Y < s.Max.Y { r.Max.Y = s.Max.Y } return r } // Canon returns the canonical version of r, where Min is to // the upper left of Max. func (r Rectangle) Canon() Rectangle {
2 references
if r.Max.X < r.Min.X { r.Min.X, r.Max.X = r.Max.X, r.Min.X } if r.Max.Y < r.Min.Y { r.Min.Y, r.Max.Y = r.Max.Y, r.Min.Y } return r } // Empty reports whether r represents the empty area. func (r Rectangle) Empty() bool {
2 references
return r.Min.X >= r.Max.X || r.Min.Y >= r.Max.Y } // Add offsets r with the vector p. func (r Rectangle) Add(p Point) Rectangle {
5 references
return Rectangle{ Point{r.Min.X + p.X, r.Min.Y + p.Y}, Point{r.Max.X + p.X, r.Max.Y + p.Y}, } } // Sub offsets r with the vector -p. func (r Rectangle) Sub(p Point) Rectangle {
2 references
return Rectangle{ Point{r.Min.X - p.X, r.Min.Y - p.Y}, Point{r.Max.X - p.X, r.Max.Y - p.Y}, } }