Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(265)

Side by Side Diff: third_party/go/src/golang.org/x/mobile/f32/affine.go

Issue 1275153002: Remove third_party/golang.org/x/mobile as it is no longer used with Go 1.5. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Remove golang.org/x/mobile Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package f32
6
7 import "fmt"
8
9 // An Affine is a 3x3 matrix of float32 values for which the bottom row is
10 // implicitly always equal to [0 0 1].
11 // Elements are indexed first by row then column, i.e. m[row][column].
12 type Affine [2]Vec3
13
14 func (m Affine) String() string {
15 return fmt.Sprintf(`Affine[% 0.3f, % 0.3f, % 0.3f,
16 % 0.3f, % 0.3f, % 0.3f]`,
17 m[0][0], m[0][1], m[0][2],
18 m[1][0], m[1][1], m[1][2])
19 }
20
21 // Identity sets m to be the identity transform.
22 func (m *Affine) Identity() {
23 *m = Affine{
24 {1, 0, 0},
25 {0, 1, 0},
26 }
27 }
28
29 // Eq reports whether each component of m is within epsilon of the same
30 // component in n.
31 func (m *Affine) Eq(n *Affine, epsilon float32) bool {
32 for i := range m {
33 for j := range m[i] {
34 diff := m[i][j] - n[i][j]
35 if diff < -epsilon || +epsilon < diff {
36 return false
37 }
38 }
39 }
40 return true
41 }
42
43 // Mul sets m to be p × q.
44 func (m *Affine) Mul(p, q *Affine) {
45 // Store the result in local variables, in case m == a || m == b.
46 m00 := p[0][0]*q[0][0] + p[0][1]*q[1][0]
47 m01 := p[0][0]*q[0][1] + p[0][1]*q[1][1]
48 m02 := p[0][0]*q[0][2] + p[0][1]*q[1][2] + p[0][2]
49 m10 := p[1][0]*q[0][0] + p[1][1]*q[1][0]
50 m11 := p[1][0]*q[0][1] + p[1][1]*q[1][1]
51 m12 := p[1][0]*q[0][2] + p[1][1]*q[1][2] + p[1][2]
52 m[0][0] = m00
53 m[0][1] = m01
54 m[0][2] = m02
55 m[1][0] = m10
56 m[1][1] = m11
57 m[1][2] = m12
58 }
59
60 // Inverse sets m to be the inverse of p.
61 func (m *Affine) Inverse(p *Affine) {
62 m00 := p[1][1]
63 m01 := -p[0][1]
64 m02 := p[1][2]*p[0][1] - p[1][1]*p[0][2]
65 m10 := -p[1][0]
66 m11 := p[0][0]
67 m12 := p[1][0]*p[0][2] - p[1][2]*p[0][0]
68
69 det := m00*m11 - m10*m01
70
71 m[0][0] = m00 / det
72 m[0][1] = m01 / det
73 m[0][2] = m02 / det
74 m[1][0] = m10 / det
75 m[1][1] = m11 / det
76 m[1][2] = m12 / det
77 }
78
79 // Scale sets m to be a scale followed by p.
80 // It is equivalent to m.Mul(p, &Affine{{x,0,0}, {0,y,0}}).
81 func (m *Affine) Scale(p *Affine, x, y float32) {
82 m[0][0] = p[0][0] * x
83 m[0][1] = p[0][1] * y
84 m[0][2] = p[0][2]
85 m[1][0] = p[1][0] * x
86 m[1][1] = p[1][1] * y
87 m[1][2] = p[1][2]
88 }
89
90 // Translate sets m to be a translation followed by p.
91 // It is equivalent to m.Mul(p, &Affine{{1,0,x}, {0,1,y}}).
92 func (m *Affine) Translate(p *Affine, x, y float32) {
93 m[0][0] = p[0][0]
94 m[0][1] = p[0][1]
95 m[0][2] = p[0][0]*x + p[0][1]*y + p[0][2]
96 m[1][0] = p[1][0]
97 m[1][1] = p[1][1]
98 m[1][2] = p[1][0]*x + p[1][1]*y + p[1][2]
99 }
100
101 // Rotate sets m to a rotation in radians followed by p.
102 // It is equivalent to m.Mul(p, affineRotation).
103 func (m *Affine) Rotate(p *Affine, radians float32) {
104 s, c := Sin(radians), Cos(radians)
105 m.Mul(p, &Affine{
106 {+c, +s, 0},
107 {-s, +c, 0},
108 })
109 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698