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

Side by Side Diff: ui/gfx/matrix3_f.h

Issue 109433013: Move geometric types to a separate, more lightweight target. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef UI_GFX_MATRIX3_F_H_ 5 // TODO(beng): remove once callsites are patched.
6 #define UI_GFX_MATRIX3_F_H_ 6 #include "ui/gfx/geometry/matrix3_f.h"
7 7
8 #include "base/logging.h"
9 #include "ui/gfx/vector3d_f.h"
10
11 namespace gfx {
12
13 class GFX_EXPORT Matrix3F {
14 public:
15 ~Matrix3F();
16
17 static Matrix3F Zeros();
18 static Matrix3F Ones();
19 static Matrix3F Identity();
20 static Matrix3F FromOuterProduct(const Vector3dF& a, const Vector3dF& bt);
21
22 bool IsEqual(const Matrix3F& rhs) const;
23
24 // Element-wise comparison with given precision.
25 bool IsNear(const Matrix3F& rhs, float precision) const;
26
27 float get(int i, int j) const {
28 return data_[MatrixToArrayCoords(i, j)];
29 }
30
31 void set(int i, int j, float v) {
32 data_[MatrixToArrayCoords(i, j)] = v;
33 }
34
35 void set(float m00, float m01, float m02,
36 float m10, float m11, float m12,
37 float m20, float m21, float m22) {
38 data_[0] = m00;
39 data_[1] = m01;
40 data_[2] = m02;
41 data_[3] = m10;
42 data_[4] = m11;
43 data_[5] = m12;
44 data_[6] = m20;
45 data_[7] = m21;
46 data_[8] = m22;
47 }
48
49 Vector3dF get_column(int i) const {
50 return Vector3dF(
51 data_[MatrixToArrayCoords(0, i)],
52 data_[MatrixToArrayCoords(1, i)],
53 data_[MatrixToArrayCoords(2, i)]);
54 }
55
56 void set_column(int i, const Vector3dF& c) {
57 data_[MatrixToArrayCoords(0, i)] = c.x();
58 data_[MatrixToArrayCoords(1, i)] = c.y();
59 data_[MatrixToArrayCoords(2, i)] = c.z();
60 }
61
62 // Returns an inverse of this if the matrix is non-singular, zero (== Zero())
63 // otherwise.
64 Matrix3F Inverse() const;
65
66 // Value of the determinant of the matrix.
67 float Determinant() const;
68
69 // Trace (sum of diagonal elements) of the matrix.
70 float Trace() const {
71 return data_[MatrixToArrayCoords(0, 0)] +
72 data_[MatrixToArrayCoords(1, 1)] +
73 data_[MatrixToArrayCoords(2, 2)];
74 }
75
76 // Compute eigenvalues and (optionally) normalized eigenvectors of
77 // a positive defnite matrix *this. Eigenvectors are computed only if
78 // non-null |eigenvectors| matrix is passed. If it is NULL, the routine
79 // will not attempt to compute eigenvectors but will still return eigenvalues
80 // if they can be computed.
81 // If eigenvalues cannot be computed (the matrix does not meet constraints)
82 // the 0-vector is returned. Note that to retrieve eigenvalues, the matrix
83 // only needs to be symmetric while eigenvectors require it to be
84 // positive-definite. Passing a non-positive definite matrix will result in
85 // NaNs in vectors which cannot be computed.
86 // Eigenvectors are placed as column in |eigenvectors| in order corresponding
87 // to eigenvalues.
88 Vector3dF SolveEigenproblem(Matrix3F* eigenvectors) const;
89
90 private:
91 Matrix3F(); // Uninitialized default.
92
93 static int MatrixToArrayCoords(int i, int j) {
94 DCHECK(i >= 0 && i < 3);
95 DCHECK(j >= 0 && j < 3);
96 return i * 3 + j;
97 }
98
99 float data_[9];
100 };
101
102 inline bool operator==(const Matrix3F& lhs, const Matrix3F& rhs) {
103 return lhs.IsEqual(rhs);
104 }
105
106 } // namespace gfx
107
108 #endif // UI_GFX_MATRIX3_F_H_
OLDNEW
« ui/aura/aura.gyp ('K') | « ui/gfx/insets_unittest.cc ('k') | ui/gfx/matrix3_f.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698