📄 imathmatrix.h
字号:
{
return x[i];
}
template <class T>
inline
Matrix44<T>::Matrix44 ()
{
x[0][0] = 1;
x[0][1] = 0;
x[0][2] = 0;
x[0][3] = 0;
x[1][0] = 0;
x[1][1] = 1;
x[1][2] = 0;
x[1][3] = 0;
x[2][0] = 0;
x[2][1] = 0;
x[2][2] = 1;
x[2][3] = 0;
x[3][0] = 0;
x[3][1] = 0;
x[3][2] = 0;
x[3][3] = 1;
}
template <class T>
inline
Matrix44<T>::Matrix44 (T a)
{
x[0][0] = a;
x[0][1] = a;
x[0][2] = a;
x[0][3] = a;
x[1][0] = a;
x[1][1] = a;
x[1][2] = a;
x[1][3] = a;
x[2][0] = a;
x[2][1] = a;
x[2][2] = a;
x[2][3] = a;
x[3][0] = a;
x[3][1] = a;
x[3][2] = a;
x[3][3] = a;
}
template <class T>
inline
Matrix44<T>::Matrix44 (const T a[4][4])
{
x[0][0] = a[0][0];
x[0][1] = a[0][1];
x[0][2] = a[0][2];
x[0][3] = a[0][3];
x[1][0] = a[1][0];
x[1][1] = a[1][1];
x[1][2] = a[1][2];
x[1][3] = a[1][3];
x[2][0] = a[2][0];
x[2][1] = a[2][1];
x[2][2] = a[2][2];
x[2][3] = a[2][3];
x[3][0] = a[3][0];
x[3][1] = a[3][1];
x[3][2] = a[3][2];
x[3][3] = a[3][3];
}
template <class T>
inline
Matrix44<T>::Matrix44 (T a, T b, T c, T d, T e, T f, T g, T h,
T i, T j, T k, T l, T m, T n, T o, T p)
{
x[0][0] = a;
x[0][1] = b;
x[0][2] = c;
x[0][3] = d;
x[1][0] = e;
x[1][1] = f;
x[1][2] = g;
x[1][3] = h;
x[2][0] = i;
x[2][1] = j;
x[2][2] = k;
x[2][3] = l;
x[3][0] = m;
x[3][1] = n;
x[3][2] = o;
x[3][3] = p;
}
template <class T>
inline
Matrix44<T>::Matrix44 (Matrix33<T> r, Vec3<T> t)
{
x[0][0] = r[0][0];
x[0][1] = r[0][1];
x[0][2] = r[0][2];
x[0][3] = 0;
x[1][0] = r[1][0];
x[1][1] = r[1][1];
x[1][2] = r[1][2];
x[1][3] = 0;
x[2][0] = r[2][0];
x[2][1] = r[2][1];
x[2][2] = r[2][2];
x[2][3] = 0;
x[3][0] = t[0];
x[3][1] = t[1];
x[3][2] = t[2];
x[3][3] = 1;
}
template <class T>
inline
Matrix44<T>::Matrix44 (const Matrix44 &v)
{
x[0][0] = v.x[0][0];
x[0][1] = v.x[0][1];
x[0][2] = v.x[0][2];
x[0][3] = v.x[0][3];
x[1][0] = v.x[1][0];
x[1][1] = v.x[1][1];
x[1][2] = v.x[1][2];
x[1][3] = v.x[1][3];
x[2][0] = v.x[2][0];
x[2][1] = v.x[2][1];
x[2][2] = v.x[2][2];
x[2][3] = v.x[2][3];
x[3][0] = v.x[3][0];
x[3][1] = v.x[3][1];
x[3][2] = v.x[3][2];
x[3][3] = v.x[3][3];
}
template <class T>
inline const Matrix44<T> &
Matrix44<T>::operator = (const Matrix44 &v)
{
x[0][0] = v.x[0][0];
x[0][1] = v.x[0][1];
x[0][2] = v.x[0][2];
x[0][3] = v.x[0][3];
x[1][0] = v.x[1][0];
x[1][1] = v.x[1][1];
x[1][2] = v.x[1][2];
x[1][3] = v.x[1][3];
x[2][0] = v.x[2][0];
x[2][1] = v.x[2][1];
x[2][2] = v.x[2][2];
x[2][3] = v.x[2][3];
x[3][0] = v.x[3][0];
x[3][1] = v.x[3][1];
x[3][2] = v.x[3][2];
x[3][3] = v.x[3][3];
return *this;
}
template <class T>
inline const Matrix44<T> &
Matrix44<T>::operator = (T a)
{
x[0][0] = a;
x[0][1] = a;
x[0][2] = a;
x[0][3] = a;
x[1][0] = a;
x[1][1] = a;
x[1][2] = a;
x[1][3] = a;
x[2][0] = a;
x[2][1] = a;
x[2][2] = a;
x[2][3] = a;
x[3][0] = a;
x[3][1] = a;
x[3][2] = a;
x[3][3] = a;
return *this;
}
template <class T>
inline T *
Matrix44<T>::getValue ()
{
return (T *) &x[0][0];
}
template <class T>
inline const T *
Matrix44<T>::getValue () const
{
return (const T *) &x[0][0];
}
template <class T>
template <class S>
inline void
Matrix44<T>::getValue (Matrix44<S> &v) const
{
v.x[0][0] = x[0][0];
v.x[0][1] = x[0][1];
v.x[0][2] = x[0][2];
v.x[0][3] = x[0][3];
v.x[1][0] = x[1][0];
v.x[1][1] = x[1][1];
v.x[1][2] = x[1][2];
v.x[1][3] = x[1][3];
v.x[2][0] = x[2][0];
v.x[2][1] = x[2][1];
v.x[2][2] = x[2][2];
v.x[2][3] = x[2][3];
v.x[3][0] = x[3][0];
v.x[3][1] = x[3][1];
v.x[3][2] = x[3][2];
v.x[3][3] = x[3][3];
}
template <class T>
template <class S>
inline Matrix44<T> &
Matrix44<T>::setValue (const Matrix44<S> &v)
{
x[0][0] = v.x[0][0];
x[0][1] = v.x[0][1];
x[0][2] = v.x[0][2];
x[0][3] = v.x[0][3];
x[1][0] = v.x[1][0];
x[1][1] = v.x[1][1];
x[1][2] = v.x[1][2];
x[1][3] = v.x[1][3];
x[2][0] = v.x[2][0];
x[2][1] = v.x[2][1];
x[2][2] = v.x[2][2];
x[2][3] = v.x[2][3];
x[3][0] = v.x[3][0];
x[3][1] = v.x[3][1];
x[3][2] = v.x[3][2];
x[3][3] = v.x[3][3];
return *this;
}
template <class T>
template <class S>
inline Matrix44<T> &
Matrix44<T>::setTheMatrix (const Matrix44<S> &v)
{
x[0][0] = v.x[0][0];
x[0][1] = v.x[0][1];
x[0][2] = v.x[0][2];
x[0][3] = v.x[0][3];
x[1][0] = v.x[1][0];
x[1][1] = v.x[1][1];
x[1][2] = v.x[1][2];
x[1][3] = v.x[1][3];
x[2][0] = v.x[2][0];
x[2][1] = v.x[2][1];
x[2][2] = v.x[2][2];
x[2][3] = v.x[2][3];
x[3][0] = v.x[3][0];
x[3][1] = v.x[3][1];
x[3][2] = v.x[3][2];
x[3][3] = v.x[3][3];
return *this;
}
template <class T>
inline void
Matrix44<T>::makeIdentity()
{
x[0][0] = 1;
x[0][1] = 0;
x[0][2] = 0;
x[0][3] = 0;
x[1][0] = 0;
x[1][1] = 1;
x[1][2] = 0;
x[1][3] = 0;
x[2][0] = 0;
x[2][1] = 0;
x[2][2] = 1;
x[2][3] = 0;
x[3][0] = 0;
x[3][1] = 0;
x[3][2] = 0;
x[3][3] = 1;
}
template <class T>
bool
Matrix44<T>::operator == (const Matrix44 &v) const
{
return x[0][0] == v.x[0][0] &&
x[0][1] == v.x[0][1] &&
x[0][2] == v.x[0][2] &&
x[0][3] == v.x[0][3] &&
x[1][0] == v.x[1][0] &&
x[1][1] == v.x[1][1] &&
x[1][2] == v.x[1][2] &&
x[1][3] == v.x[1][3] &&
x[2][0] == v.x[2][0] &&
x[2][1] == v.x[2][1] &&
x[2][2] == v.x[2][2] &&
x[2][3] == v.x[2][3] &&
x[3][0] == v.x[3][0] &&
x[3][1] == v.x[3][1] &&
x[3][2] == v.x[3][2] &&
x[3][3] == v.x[3][3];
}
template <class T>
bool
Matrix44<T>::operator != (const Matrix44 &v) const
{
return x[0][0] != v.x[0][0] ||
x[0][1] != v.x[0][1] ||
x[0][2] != v.x[0][2] ||
x[0][3] != v.x[0][3] ||
x[1][0] != v.x[1][0] ||
x[1][1] != v.x[1][1] ||
x[1][2] != v.x[1][2] ||
x[1][3] != v.x[1][3] ||
x[2][0] != v.x[2][0] ||
x[2][1] != v.x[2][1] ||
x[2][2] != v.x[2][2] ||
x[2][3] != v.x[2][3] ||
x[3][0] != v.x[3][0] ||
x[3][1] != v.x[3][1] ||
x[3][2] != v.x[3][2] ||
x[3][3] != v.x[3][3];
}
template <class T>
bool
Matrix44<T>::equalWithAbsError (const Matrix44<T> &m, T e) const
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
if (!Imath::equalWithAbsError ((*this)[i][j], m[i][j], e))
return false;
return true;
}
template <class T>
bool
Matrix44<T>::equalWithRelError (const Matrix44<T> &m, T e) const
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
if (!Imath::equalWithRelError ((*this)[i][j], m[i][j], e))
return false;
return true;
}
template <class T>
const Matrix44<T> &
Matrix44<T>::operator += (const Matrix44<T> &v)
{
x[0][0] += v.x[0][0];
x[0][1] += v.x[0][1];
x[0][2] += v.x[0][2];
x[0][3] += v.x[0][3];
x[1][0] += v.x[1][0];
x[1][1] += v.x[1][1];
x[1][2] += v.x[1][2];
x[1][3] += v.x[1][3];
x[2][0] += v.x[2][0];
x[2][1] += v.x[2][1];
x[2][2] += v.x[2][2];
x[2][3] += v.x[2][3];
x[3][0] += v.x[3][0];
x[3][1] += v.x[3][1];
x[3][2] += v.x[3][2];
x[3][3] += v.x[3][3];
return *this;
}
template <class T>
const Matrix44<T> &
Matrix44<T>::operator += (T a)
{
x[0][0] += a;
x[0][1] += a;
x[0][2] += a;
x[0][3] += a;
x[1][0] += a;
x[1][1] += a;
x[1][2] += a;
x[1][3] += a;
x[2][0] += a;
x[2][1] += a;
x[2][2] += a;
x[2][3] += a;
x[3][0] += a;
x[3][1] += a;
x[3][2] += a;
x[3][3] += a;
return *this;
}
template <class T>
Matrix44<T>
Matrix44<T>::operator + (const Matrix44<T> &v) const
{
return Matrix44 (x[0][0] + v.x[0][0],
x[0][1] + v.x[0][1],
x[0][2] + v.x[0][2],
x[0][3] + v.x[0][3],
x[1][0] + v.x[1][0],
x[1][1] + v.x[1][1],
x[1][2] + v.x[1][2],
x[1][3] + v.x[1][3],
x[2][0] + v.x[2][0],
x[2][1] + v.x[2][1],
x[2][2] + v.x[2][2],
x[2][3] + v.x[2][3],
x[3][0] + v.x[3][0],
x[3][1] + v.x[3][1],
x[3][2] + v.x[3][2],
x[3][3] + v.x[3][3]);
}
template <class T>
const Matrix44<T> &
Matrix44<T>::operator -= (const Matrix44<T> &v)
{
x[0][0] -= v.x[0][0];
x[0][1] -= v.x[0][1];
x[0][2] -= v.x[0][2];
x[0][3] -= v.x[0][3];
x[1][0] -= v.x[1][0];
x[1][1] -= v.x[1][1];
x[1][2] -= v.x[1][2];
x[1][3] -= v.x[1][3];
x[2][0] -= v.x[2][0];
x[2][1] -= v.x[2][1];
x[2][2] -= v.x[2][2];
x[2][3] -= v.x[2][3];
x[3][0] -= v.x[3][0];
x[3][1] -= v.x[3][1];
x[3][2] -= v.x[3][2];
x[3][3] -= v.x[3][3];
return *this;
}
template <class T>
const Matrix44<T> &
Matrix44<T>::operator -= (T a)
{
x[0][0] -= a;
x[0][1] -= a;
x[0][2] -= a;
x[0][3] -= a;
x[1][0] -= a;
x[1][1] -= a;
x[1][2] -= a;
x[1][3] -= a;
x[2][0] -= a;
x[2][1] -= a;
x[2][2] -= a;
x[2][3] -= a;
x[3][0] -= a;
x[3][1] -= a;
x[3][2] -= a;
x[3][3] -= a;
return *this;
}
template <class T>
Matrix44<T>
Matrix44<T>::operator - (const Matrix44<T> &v) const
{
return Matrix44 (x[0][0] - v.x[0][0],
x[0][1] - v.x[0][1],
x[0][2] - v.x[0][2],
x[0][3] - v.x[0][3],
x[1][0] - v.x[1][0],
x[1][1] - v.x[1][1],
x[1][2] - v.x[1][2],
x[1][3] - v.x[1][3],
x[2][0] - v.x[2][0],
x[2][1] - v.x[2][1],
x[2][2] - v.x[2][2],
x[2][3] - v.x[2][3],
x[3][0] - v.x[3][0],
x[3][1] - v.x[3][1],
x[3][2] - v.x[3][2],
x[3][3] - v.x[3][3]);
}
template <class T>
Matrix44<T>
Matrix44<T>::operator - () const
{
return Matrix44 (-x[0][0],
-x[0][1],
-x[0][2],
-x[0][3],
-x[1][0],
-x[1][1],
-x[1][2],
-x[1][3],
-x[2][0],
-x[2][1],
-x[2][2],
-x[2][3],
-x[3][0],
-x[3][1],
-x[3][2],
-x[3][3]);
}
template <class T>
const Matrix44<T> &
Matrix44<T>::negate ()
{
x[0][0] = -x[0][0];
x[0][1] = -x[0][1];
x[0][2] = -x[0][2];
x[0][3] = -x[0][3];
x[1][0] = -x[1][0];
x[1][1] = -x[1][1];
x[1][2] = -x[1][2];
x[1][3] = -x[1][3];
x[2][0] = -x[2][0];
x[2][1] = -x[2][1];
x[2][2] = -x[2][2];
x[2][3] = -x[2][3];
x[3][0] = -x[3][0];
x[3][1] = -x[3][1];
x[3][2] = -x[3][2];
x[3][3] = -x[3][3];
return *this;
}
template <class T>
const Matrix44<T> &
Matrix44<T>::operator *= (T a)
{
x[0][0] *= a;
x[0][1] *= a;
x[0][2] *= a;
x[0][3] *= a;
x[1][0] *= a;
x[1][1] *= a;
x[1][2] *= a;
x[1][3] *= a;
x[2][0] *= a;
x[2][1] *= a;
x[2][2] *= a;
x[2][3] *= a;
x[3][0] *= a;
x[3][1] *= a;
x[3][2] *= a;
x[3][3] *= a;
return *this;
}
template <class T>
Matrix44<T>
Matrix44<T>::operator * (T a) const
{
return Matrix44 (x[0][0] * a,
x[0][1] * a,
x[0][2] * a,
x[0][3] * a,
x[1][0] * a,
x[1][1] * a,
x[1][2] * a,
x[1][3] * a,
x[2][0] * a,
x[2][1] * a,
x[2][2] * a,
x[2][3] * a,
x[3][0] * a,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -