X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fmatrix.hh;fp=src%2Fmatrix.hh;h=0000000000000000000000000000000000000000;hb=0fffd0097d7b496454413e57b398c903ecc252e4;hp=49bdd4c1ca2154c1414bca72a1658e0c292d7857;hpb=79becf045222f385da5a1b9eb79081f6f5266c86;p=chaz%2Fyoink diff --git a/src/matrix.hh b/src/matrix.hh deleted file mode 100644 index 49bdd4c..0000000 --- a/src/matrix.hh +++ /dev/null @@ -1,373 +0,0 @@ - -/******************************************************************************* - - Copyright (c) 2009, Charles McGarvey - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ - -#ifndef _MATRIX_HH_ -#define _MATRIX_HH_ - -/** - * @file matrix.hh - * Matrix classes. - */ - -#include - -#include "math.hh" - - -namespace dc { - -/** - * 3x3 matrix. - */ - -struct matrix3 -{ - matrix3() {} - matrix3(scalar M11, scalar M12, scalar M13, - scalar M21, scalar M22, scalar M23, - scalar M31, scalar M32, scalar M33) - { - m11 = M11; m12 = M12; m13 = M13; - m21 = M21; m22 = M22; m23 = M23; - m31 = M31; m32 = M32; m33 = M33; - } - matrix3(scalar m[9]) - { - array[0] = m[0]; array[1] = m[1]; array[2] = m[2]; - array[3] = m[3]; array[4] = m[4]; array[5] = m[5]; - array[6] = m[6]; array[7] = m[7]; array[8] = m[8]; - } - - const scalar& operator[](int i) const - { - assert(i >= 0 && i <= 8 && "Index into matrix3 out of bounds."); - return array[i]; - } - scalar& operator[](int i) - { - assert(i >= 0 && i <= 8 && "Index into matrix3 out of bounds."); - return array[i]; - } - - matrix3 operator+(const matrix3& m) const - { - return matrix3(m11 + m.m11, m12 + m.m12, m13 + m.m13, - m21 + m.m21, m22 + m.m22, m23 + m.m23, - m31 + m.m31, m32 + m.m32, m33 + m.m33); - } - matrix3 operator-(const matrix3& m) const - { - return matrix3(m11 - m.m11, m12 - m.m12, m13 - m.m13, - m21 - m.m21, m22 - m.m22, m23 - m.m23, - m31 - m.m31, m32 - m.m32, m33 - m.m33); - } - matrix3 operator*(const matrix3& m) const - { - return matrix3(m11 * m.m11 + m12 * m.m21 + m13 * m.m31, - m11 * m.m12 + m12 * m.m22 + m13 * m.m32, - m11 * m.m13 + m12 * m.m23 + m13 * m.m33, - m21 * m.m11 + m22 * m.m21 + m23 * m.m31, - m21 * m.m12 + m22 * m.m22 + m23 * m.m32, - m21 * m.m13 + m22 * m.m23 + m23 * m.m33, - m31 * m.m11 + m32 * m.m21 + m33 * m.m31, - m31 * m.m12 + m32 * m.m22 + m33 * m.m32, - m32 * m.m13 + m32 * m.m23 + m33 * m.m33); - } - matrix3 operator*(scalar s) const - { - return matrix3(m11 * s, m12 * s, m13 * s, - m21 * s, m22 * s, m23 * s, - m31 * s, m32 * s, m33 * s); - } - matrix3 operator/(scalar s) const - { - return matrix3(m11 / s, m12 / s, m13 / s, - m21 / s, m22 / s, m23 / s, - m31 / s, m32 / s, m33 / s); - } - - matrix3& operator+=(const matrix3& m) - { - m11 += m.m11; m12 += m.m12; m13 += m.m13; - m21 += m.m21; m22 += m.m22; m23 += m.m23; - m31 += m.m31; m32 += m.m32; m33 += m.m33; - return *this; - } - matrix3& operator-=(const matrix3& m) - { - m11 -= m.m11; m12 -= m.m12; m13 -= m.m13; - m21 -= m.m21; m22 -= m.m22; m23 -= m.m23; - m31 -= m.m31; m32 -= m.m32; m33 -= m.m33; - return *this; - } - matrix3& operator*=(const matrix3& m) - { - return *this = *this * m; - } - matrix3& operator*=(scalar s) - { - m11 *= s; m12 *= s; m13 *= s; - m21 *= s; m22 *= s; m23 *= s; - m31 *= s; m32 *= s; m33 *= s; - return *this; - } - matrix3& operator/=(scalar s) - { - m11 /= s; m12 /= s; m13 /= s; - m21 /= s; m22 /= s; m23 /= s; - m31 /= s; m32 /= s; m33 /= s; - return *this; - } - - matrix3 operator-() const - { - return matrix3(-m11, -m12, -m13, - -m21, -m22, -m23, - -m31, -m32, -m33); - } - - bool operator==(const matrix3& m) const - { - return equals(m11,m.m11) && equals(m12,m.m12) && equals(m13,m.m13) && - equals(m21,m.m21) && equals(m22,m.m22) && equals(m23,m.m23) && - equals(m31,m.m31) && equals(m32,m.m32) && equals(m33,m.m33); - } - bool operator!=(const matrix3& m) const - { - return !(*this == m); - } - - - union - { - struct - { - scalar m11, m21, m31; - scalar m12, m22, m32; - scalar m13, m23, m33; ///< scalars - }; - scalar array[9]; ///< array - }; - - static matrix3 zero; ///< zero matrix - static matrix3 identity; ///< identity matrix -}; - -inline matrix3 operator*(scalar s, const matrix3& m) -{ - return m * s; -} -inline matrix3 operator/(scalar s, const matrix3& m) -{ - return matrix3(s / m.m11, s / m.m12, s / m.m13, - s / m.m21, s / m.m22, s / m.m23, - s / m.m31, s / m.m32, s / m.m33); -} - - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -/** - * 4x4 matrix. - */ - -struct matrix4 -{ - matrix4() {} - matrix4(scalar M11, scalar M12, scalar M13, scalar M14, - scalar M21, scalar M22, scalar M23, scalar M24, - scalar M31, scalar M32, scalar M33, scalar M34, - scalar M41, scalar M42, scalar M43, scalar M44) - { - m11 = M11; m12 = M12; m13 = M13; m14 = M14; - m21 = M21; m22 = M22; m23 = M23; m24 = M24; - m31 = M31; m32 = M32; m33 = M33; m34 = M34; - m41 = M41; m42 = M42; m43 = M43; m44 = M44; - } - matrix4(scalar m[15]) - { - array[0] = m[0]; array[1] = m[1]; array[2] = m[2]; array[3] = m[3]; - array[4] = m[4]; array[5] = m[5]; array[6] = m[6]; array[7] = m[7]; - array[8] = m[8]; array[9] = m[9]; array[10] = m[10]; array[11] = m[11]; - array[12] = m[12]; array[13] = m[13]; array[14] = m[14]; array[15] = m[15]; - } - - const scalar& operator[](int i) const - { - assert(i >= 0 && i <= 15 && "Index into matrix4 out of bounds."); - return array[i]; - } - scalar& operator[](int i) - { - assert(i >= 0 && i <= 15 && "Index into matrix4 out of bounds."); - return array[i]; - } - - matrix4 operator+(const matrix4& m) const - { - return matrix4(m11 + m.m11, m12 + m.m12, m13 + m.m13, m14 + m.m14, - m21 + m.m21, m22 + m.m22, m23 + m.m23, m24 + m.m24, - m31 + m.m31, m32 + m.m32, m33 + m.m33, m34 + m.m34, - m41 + m.m41, m42 + m.m42, m43 + m.m43, m44 + m.m44); - } - matrix4 operator-(const matrix4& m) const - { - return matrix4(m11 - m.m11, m12 - m.m12, m13 - m.m13, m14 - m.m14, - m21 - m.m21, m22 - m.m22, m23 - m.m23, m24 - m.m24, - m31 - m.m31, m32 - m.m32, m33 - m.m33, m34 - m.m34, - m41 - m.m41, m42 - m.m42, m43 - m.m43, m44 - m.m44); - } - matrix4 operator*(const matrix4& m) const // TODO ?? - { - return matrix4(m11 * m.m11 + m12 * m.m21 + m13 * m.m31 + m14 * m.m41, - m11 * m.m12 + m12 * m.m22 + m13 * m.m32 + m14 * m.m42, - m11 * m.m13 + m12 * m.m23 + m13 * m.m33 + m14 * m.m43, - m11 * m.m14 + m12 * m.m24 + m13 * m.m34 + m14 * m.m44, - m21 * m.m11 + m22 * m.m21 + m23 * m.m31 + m24 * m.m41, - m21 * m.m12 + m22 * m.m22 + m23 * m.m32 + m24 * m.m42, - m21 * m.m13 + m22 * m.m23 + m23 * m.m33 + m24 * m.m43, - m21 * m.m14 + m22 * m.m24 + m23 * m.m34 + m24 * m.m44, - m31 * m.m11 + m32 * m.m21 + m33 * m.m31 + m34 * m.m41, - m31 * m.m12 + m32 * m.m22 + m33 * m.m32 + m34 * m.m42, - m31 * m.m13 + m32 * m.m23 + m33 * m.m33 + m34 * m.m43, - m31 * m.m14 + m32 * m.m24 + m33 * m.m34 + m34 * m.m44, - m41 * m.m11 + m42 * m.m21 + m43 * m.m31 + m44 * m.m41, - m41 * m.m12 + m42 * m.m22 + m43 * m.m32 + m44 * m.m42, - m41 * m.m13 + m42 * m.m23 + m43 * m.m33 + m44 * m.m43, - m41 * m.m14 + m42 * m.m24 + m43 * m.m34 + m44 * m.m44); - } - matrix4 operator*(scalar s) const - { - return matrix4(m11 * s, m12 * s, m13 * s, m14 * s, - m21 * s, m22 * s, m23 * s, m24 * s, - m31 * s, m32 * s, m33 * s, m34 * s, - m41 * s, m42 * s, m43 * s, m44 * s); - } - matrix4 operator/(scalar s) const - { - return matrix4(m11 / s, m12 / s, m13 / s, m14 / s, - m21 / s, m22 / s, m23 / s, m24 / s, - m31 / s, m32 / s, m33 / s, m34 / s, - m41 / s, m42 / s, m43 / s, m44 / s); - } - - matrix4& operator+=(const matrix4& m) - { - m11 += m.m11; m12 += m.m12; m13 += m.m13; m14 += m.m14; - m21 += m.m21; m22 += m.m22; m23 += m.m23; m24 += m.m24; - m31 += m.m31; m32 += m.m32; m33 += m.m33; m34 += m.m34; - m41 += m.m41; m42 += m.m42; m43 += m.m43; m44 += m.m44; - return *this; - } - matrix4& operator-=(const matrix4& m) - { - m11 -= m.m11; m12 -= m.m12; m13 -= m.m13; m14 -= m.m14; - m21 -= m.m21; m22 -= m.m22; m23 -= m.m23; m24 -= m.m24; - m31 -= m.m31; m32 -= m.m32; m33 -= m.m33; m34 -= m.m34; - m41 -= m.m41; m42 -= m.m42; m43 -= m.m43; m44 -= m.m44; - return *this; - } - matrix4& operator*=(const matrix4& m) - { - *this = *this * m; - return *this; - } - matrix4& operator*=(scalar s) - { - m11 *= s; m12 *= s; m13 *= s; m14 *= s; - m21 *= s; m22 *= s; m23 *= s; m24 *= s; - m31 *= s; m32 *= s; m33 *= s; m34 *= s; - m41 *= s; m42 *= s; m43 *= s; m44 *= s; - return *this; - } - matrix4& operator/=(scalar s) - { - m11 /= s; m12 /= s; m13 /= s; m14 /= s; - m21 /= s; m22 /= s; m23 /= s; m24 /= s; - m31 /= s; m32 /= s; m33 /= s; m34 /= s; - m41 /= s; m42 /= s; m43 /= s; m44 /= s; - return *this; - } - - matrix4 operator-() const - { - return matrix4(-m11, -m12, -m13, -m14, - -m21, -m22, -m23, -m24, - -m31, -m32, -m33, -m34, - -m41, -m42, -m43, -m44); - } - - bool operator==(const matrix4& m) const - { - return equals(m11,m.m11) && equals(m12,m.m12) && equals(m13,m.m13) && - equals(m14,m.m14) && equals(m21,m.m21) && equals(m22,m.m22) && - equals(m23,m.m23) && equals(m24,m.m24) && equals(m31,m.m31) && - equals(m32,m.m32) && equals(m33,m.m33) && equals(m34,m.m34) && - equals(m41,m.m41) && equals(m42,m.m42) && equals(m43,m.m43) && - equals(m44,m.m44); - } - bool operator!=(const matrix4& m) const - { - return !(*this == m); - } - - - union - { - struct - { - scalar m11, m21, m31, m41; - scalar m12, m22, m32, m42; - scalar m13, m23, m33, m43; - scalar m14, m24, m34, m44; ///< scalars - }; - scalar array[16]; ///< array - }; - - static matrix4 zero; ///< zero matrix - static matrix4 identity; ///< identity matrix -}; - -inline matrix4 operator*(scalar s, const matrix4& m) -{ - return m * s; -} -inline matrix4 operator/(scalar s, const matrix4& m) -{ - return matrix4(s / m.m11, s / m.m12, s / m.m13, s / m.m14, - s / m.m21, s / m.m22, s / m.m23, s / m.m24, - s / m.m31, s / m.m32, s / m.m33, s / m.m34, - s / m.m41, s / m.m42, s / m.m43, s / m.m44); -} - - -} // namespace dc - - -#endif // _MATRIX_HH_ -