Lines Matching refs:T
30 template<typename T>
36 Matrix3(T m00, T m01, T m02, T m10, T m11, T m12, T m20, T m21, T m22);
37 Matrix3(std::vector<T> M);
41 explicit Matrix3(const T* v);
44 T Trace() const;
56 Vector3<T> operator*(const Vector3<T>& other) const;
57 Matrix3 operator*(T scale) const;
58 T* operator[](int col);
63 Matrix3& operator*=(T scale);
66 bool IsNearEqual(const Matrix3& other, T threshold = std::numeric_limits<T>::epsilon()) const;
67 T* GetData();
68 const T* GetConstData() const;
69 T Determinant() const;
71 Matrix3 Translate(const Vector2<T>& vec) const;
72 Matrix3 Rotate(T angle) const;
73 Matrix3 Rotate(T angle, T pivotx, T pivoty) const;
74 Matrix3 Scale(const Vector2<T>& vec) const;
75 Matrix3 Scale(const Vector2<T>& vec, T pivotx, T pivoty) const;
76 Matrix3 ShearX(T y) const;
77 Matrix3 ShearY(T x) const;
80 T data_[MATRIX3_SIZE] = { 0 };
86 template<typename T>
87 const Matrix3<T> Matrix3<T>::ZERO(0, 0, 0, 0, 0, 0, 0, 0, 0);
89 template<typename T>
90 const Matrix3<T> Matrix3<T>::IDENTITY(1, 0, 0, 0, 1, 0, 0, 0, 1);
92 template<typename T>
93 Matrix3<T>::Matrix3() in Matrix3()
96 template<typename T>
97 Matrix3<T>::Matrix3(T m00, T m01, T m02, T m10, T m11, T m12, T m20, T m21, T m22) in Matrix3()
112 template<typename T>
113 Matrix3<T>::Matrix3(std::vector<T> matrix) in Matrix3()
124 template<typename T>
125 Matrix3<T>::Matrix3(const T* v) in Matrix3()
130 template<typename T>
131 Matrix3<T>::~Matrix3() in ~Matrix3()
134 template<typename T>
135 T Matrix3<T>::Trace() const in Trace()
137 T rTrace = 0.0; in Trace()
144 template<typename T>
145 int Matrix3<T>::Index(int row, int col) in Index()
150 template<typename T>
151 void Matrix3<T>::SetIdentity() in SetIdentity()
156 template<typename T>
157 void Matrix3<T>::SetZero() in SetZero()
162 template<typename T>
163 bool Matrix3<T>::IsIdentity() const in IsIdentity()
165 return (MMI_EQ<T>(data_[0], 1.0)) && (MMI_EQ<T>(data_[1], 0.0)) && (MMI_EQ<T>(data_[2], 0.0)) && in IsIdentity()
166 (MMI_EQ<T>(data_[3], 0.0)) && (MMI_EQ<T>(data_[4], 1.0)) && (MMI_EQ<T>(data_[5], 0.0)) && in IsIdentity()
167 (MMI_EQ<T>(data_[6], 0.0)) && (MMI_EQ<T>(data_[7], 0.0)) && (MMI_EQ<T>(data_[8], 1.0)); in IsIdentity()
170 template<typename T>
171 Matrix3<T> Matrix3<T>::Inverse() const in Inverse()
173 T det = Determinant(); in Inverse()
174 if (MMI_EQ<T>(det, 0.0)) { in Inverse()
175 return Matrix3<T>(*this); in Inverse()
178 const T invDet = 1.0f / det; in Inverse()
179 const T* data = data_; in Inverse()
181 T iX = invDet * (data[4] * data[8] - data[5] * data[7]); in Inverse()
182 T iY = invDet * (data[2] * data[7] - data[1] * data[8]); in Inverse()
183 T iZ = invDet * (data[1] * data[5] - data[2] * data[4]); in Inverse()
184 T jX = invDet * (data[5] * data[6] - data[3] * data[8]); in Inverse()
185 T jY = invDet * (data[0] * data[8] - data[2] * data[6]); in Inverse()
186 T jZ = invDet * (data[2] * data[3] - data[0] * data[5]); in Inverse()
187 T kX = invDet * (data[3] * data[7] - data[4] * data[6]); in Inverse()
188 T kY = invDet * (data[1] * data[6] - data[0] * data[7]); in Inverse()
189 T kZ = invDet * (data[0] * data[4] - data[1] * data[3]); in Inverse()
191 return Matrix3<T>(iX, iY, iZ, jX, jY, jZ, kX, kY, kZ); in Inverse()
194 template<typename T>
195 Matrix3<T> Matrix3<T>::Multiply(const Matrix3<T>& other) const in Multiply()
197 Matrix3<T> rMulti; in Multiply()
198 T* rData = rMulti.data_; in Multiply()
199 const T* oData = other.data_; in Multiply()
215 template<typename T>
216 Matrix3<T> Matrix3<T>::operator+(const Matrix3<T>& other) const
218 Matrix3<T> rMat3Add;
219 T* rMat3Data = rMat3Add.data_;
220 const T* oData = other.data_;
235 template<typename T>
236 Matrix3<T> Matrix3<T>::operator-(const Matrix3<T>& other) const
241 template<typename T>
242 Matrix3<T> Matrix3<T>::operator-() const
244 Matrix3<T> rMat3Sub;
245 T* rMat3Data = rMat3Sub.data_;
260 template<typename T>
261 Matrix3<T> Matrix3<T>::operator*(const Matrix3<T>& other) const
266 template<typename T>
267 Vector3<T> Matrix3<T>::operator*(const Vector3<T>& other) const
269 Vector3<T> rMulti;
270 T* rData = rMulti.data_;
271 const T* oData = other.data_;
280 template<typename T>
281 Matrix3<T> Matrix3<T>::operator*(T scale) const
283 Matrix3<T> rMulti;
284 T* rData = rMulti.data_;
298 template<typename T>
299 T* Matrix3<T>::operator[](int col)
304 template<typename T>
305 Matrix3<T>& Matrix3<T>::operator=(const Matrix3<T>& other)
307 const T* oMat3Data = other.data_;
321 template<typename T>
322 Matrix3<T>& Matrix3<T>::operator+=(const Matrix3<T>& other)
324 const T* oData = other.data_;
339 template<typename T>
340 Matrix3<T>& Matrix3<T>::operator-=(const Matrix3<T>& other)
342 const T* oData = other.data_;
357 template<typename T>
358 Matrix3<T>& Matrix3<T>::operator*=(const Matrix3<T>& other)
363 template<typename T>
364 Matrix3<T>& Matrix3<T>::operator*=(T scale)
378 template<typename T>
379 bool Matrix3<T>::operator==(const Matrix3& other) const
381 const T* oData = other.data_;
383 return (MMI_EQ<T>(data_[0], oData[0])) && (MMI_EQ<T>(data_[1], oData[1])) &&
384 (MMI_EQ<T>(data_[2], oData[2])) && (MMI_EQ<T>(data_[3], oData[3])) &&
385 (MMI_EQ<T>(data_[4], oData[4])) && (MMI_EQ<T>(data_[5], oData[5])) &&
386 …(MMI_EQ<T>(data_[6], oData[6])) && (MMI_EQ<T>(data_[7], oData[7])) && (MMI_EQ<T>(data_[8], oData[8…
389 template<typename T>
390 bool Matrix3<T>::operator!=(const Matrix3& other) const
395 template<typename T>
396 bool Matrix3<T>::IsNearEqual(const Matrix3& other, T threshold) const in IsNearEqual()
398 const T* otherData = other.data_; in IsNearEqual()
400 [&threshold](const T& left, const T& right) { return MMI_EQ<T>(left, right, threshold); }); in IsNearEqual()
404 template<typename T>
405 inline T* Matrix3<T>::GetData() in GetData()
410 template<typename T>
411 const T* Matrix3<T>::GetConstData() const in GetConstData()
416 template<typename T>
417 T Matrix3<T>::Determinant() const in Determinant()
419 T x = data_[0] * ((data_[4] * data_[8]) - (data_[5] * data_[7])); in Determinant()
420 T y = data_[1] * ((data_[3] * data_[8]) - (data_[5] * data_[6])); in Determinant()
421 T z = data_[2] * ((data_[3] * data_[7]) - (data_[4] * data_[6])); in Determinant()
425 template<typename T>
426 Matrix3<T> Matrix3<T>::Transpose() const in Transpose()
428 Matrix3<T> rTrans; in Transpose()
429 T* rData = rTrans.data_; in Transpose()
442 template<typename T>
443 Matrix3<T> Matrix3<T>::Translate(const Vector2<T>& vec) const in Translate()
445 Matrix3<T> rTrans(*this); in Translate()
446 T* rData = rTrans.data_; in Translate()
454 template<typename T>
455 Matrix3<T> Matrix3<T>::Rotate(T angle) const in Rotate()
457 T a = angle; in Rotate()
458 T c = cos(a); in Rotate()
459 T s = sin(a); in Rotate()
461 Matrix3<T> rRotate(*this); in Rotate()
462 T* rData = rRotate.data_; in Rotate()
473 template<typename T>
474 Matrix3<T> Matrix3<T>::Rotate(T angle, T pivotx, T pivoty) const in Rotate()
476 T a = angle; in Rotate()
477 T c = cos(a); in Rotate()
478 T s = sin(a); in Rotate()
479 T dx = s * pivoty + (1 - c) * pivotx; in Rotate()
480 T dy = -s * pivotx + (1 - c) * pivoty; in Rotate()
482 Matrix3<T> rRotate(*this); in Rotate()
483 T* rData = rRotate.data_; in Rotate()
498 template<typename T>
499 Matrix3<T> Matrix3<T>::Scale(const Vector2<T>& vec) const in Scale()
501 Matrix3<T> rScale(*this); in Scale()
502 T* rData = rScale.data_; in Scale()
513 template<typename T>
514 Matrix3<T> Matrix3<T>::Scale(const Vector2<T>& vec, T pivotx, T pivoty) const in Scale()
516 T dx = pivotx - vec[0] * pivotx; in Scale()
517 T dy = pivoty - vec[1] * pivoty; in Scale()
519 Matrix3<T> rScale(*this); in Scale()
520 T* rData = rScale.data_; in Scale()
535 template<typename T>
536 Matrix3<T> Matrix3<T>::ShearX(T y) const in ShearX()
538 Matrix3<T> rShear(Matrix3<T>::IDENTITY); in ShearX()
543 template<typename T>
544 Matrix3<T> Matrix3<T>::ShearY(T x) const in ShearY()
546 Matrix3<T> rShear(Matrix3<T>::IDENTITY); in ShearY()