⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imathmatrix.h

📁 image converter source code
💻 H
📖 第 1 页 / 共 5 页
字号:
    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>inlineMatrix44<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 voidMatrix44<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 voidMatrix44<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>boolMatrix44<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>boolMatrix44<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>boolMatrix44<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>boolMatrix44<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,		     x[3][1] * a,		     x[3][2] * a,		     x[3][3] * a);}template <class T>inline Matrix44<T>operator * (T a, const Matrix44<T> &v){    return v * a;}template <class T>inline const Matrix44<T> &Matrix44<T>::operator *= (const Matrix44<T> &v){    Matrix44 tmp (T (0));    multiply (*this, v, tmp);    *this = tmp;    return *this;}template <class T>inline Matrix44<T>Matrix44<T>::operator * (const Matrix44<T> &v) const{    Matrix44 tmp (T (0));    multiply (*this, v, tmp);    return tmp;}template <class T>voidMatrix44<T>::multiply (const Matrix44<T> &a,		       const Matrix44<T> &b,		       Matrix44<T> &c){    register const T * restrict ap = &a.x[0][0];    register const T * restrict bp = &b.x[0][0];    register       T * restrict cp = &c.x[0][0];    register T a0, a1, a2, a3;    a0 = ap[0];    a1 = ap[1];    a2 = ap[2];    a3 = ap[3];    cp[0]  = a0 * bp[0]  + a1 * bp[4]  + a2 * bp[8]  + a3 * bp[12];    cp[1]  = a0 * bp[1]  + a1 * bp[5]  + a2 * bp[9]  + a3 * bp[13];    cp[2]  = a0 * bp[2]  + a1 * bp[6]  + a2 * bp[10] + a3 * bp[14];    cp[3]  = a0 * bp[3]  + a1 * bp[7]  + a2 * bp[11] + a3 * bp[15];    a0 = ap[4];    a1 = ap[5];    a2 = ap[6];    a3 = ap[7];    cp[4]  = a0 * bp[0]  + a1 * bp[4]  + a2 * bp[8]  + a3 * bp[12];    cp[5]  = a0 * bp[1]  + a1 * bp[5]  + a2 * bp[9]  + a3 * bp[13];    cp[6]  = a0 * bp[2]  + a1 * bp[6]  + a2 * bp[10] + a3 * bp[14];    cp[7]  = a0 * bp[3]  + a1 * bp[7]  + a2 * bp[11] + a3 * bp[15];    a0 = ap[8];    a1 = ap[9];    a2 = ap[10];    a3 = ap[11];    cp[8]  = a0 * bp[0]  + a1 * bp[4]  + a2 * bp[8]  + a3 * bp[12];    cp[9]  = a0 * bp[1]  + a1 * bp[5]  + a2 * bp[9]  + a3 * bp[13];    cp[10] = a0 * bp[2]  + a1 * bp[6]  + a2 * bp[10] + a3 * bp[14];    cp[11] = a0 * bp[3]  + a1 * bp[7]  + a2 * bp[11] + a3 * bp[15];    a0 = ap[12];    a1 = ap[13];    a2 = ap[14];    a3 = ap[15];    cp[12] = a0 * bp[0]  + a1 * bp[4]  + a2 * bp[8]  + a3 * bp[12];    cp[13] = a0 * bp[1]  + a1 * bp[5]  + a2 * bp[9]  + a3 * bp[13];    cp[14] = a0 * bp[2]  + a1 * bp[6]  + a2 * bp[10] + a3 * bp[14];    cp[15] = a0 * bp[3]  + a1 * bp[7]  + a2 * bp[11] + a3 * bp[15];}template <class T> template <class S>voidMatrix44<T>::multVecMatrix(const Vec3<S> &src, Vec3<S> &dst) const{    S a, b, c, w;    a = src[0] * x[0][0] + src[1] * x[1][0] + src[2] * x[2][0] + x[3][0];    b = src[0] * x[0][1] + src[1] * x[1][1] + src[2] * x[2][1] + x[3][1];    c = src[0] * x[0][2] + src[1] * x[1][2] + src[2] * x[2][2] + x[3][2];    w = src[0] * x[0][3] + src[1] * x[1][3] + src[2] * x[2][3] + x[3][3];    dst.x = a / w;    dst.y = b / w;    dst.z = c / w;}template <class T> template <class S>voidMatrix44<T>::multDirMatrix(const Vec3<S> &src, Vec3<S> &dst) const{    S a, b, c;    a = src[0] * x[0][0] + src[1] * x[1][0] + src[2] * x[2][0];    b = src[0] * x[0][1] + src[1] * x[1][1] + src[2] * x[2][1];    c = src[0] * x[0][2] + src[1] * x[1][2] + src[2] * x[2][2];    dst.x = a;    dst.y = b;    dst.z = c;}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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -