/*********************************************************************** * c:/users/wata/src/csmash-0.3.8.new/affine * $Id: affine,v 1.2 2002/03/05 14:21:21 yotsuya Exp $ * * Copyright by ESESoft. * * 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. * * The name of the author may not be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 __ESESoft_wata_0296__affine__INCLUDED__ #define __ESESoft_wata_0296__affine__INCLUDED__ /***********************************************************************/ #include "matrix" /* __BEGIN__BEGIN__ */ #if 0 typedef ese::Matrix<4, Float> affine4F; typedef ese::Vector<4, Float> vector4F; typedef ese::Vector<3, Float> vector3F; #else typedef Matrix<4,Float> affine4F; typedef Vector<4,Float> vector4F; typedef Vector<3,Float> vector3F; #endif inline vector4F operator ^(const vector4F &a, const vector4F &b) { vector4F v; v[0] = a[1]*b[2] - a[2]*b[1]; v[1] = a[2]*b[0] - a[0]*b[2]; v[2] = a[0]*b[1] - a[1]*b[0]; v[3] = 0; return v; } inline vector3F operator ^(const vector3F &a, const vector3F &b) { vector3F v; v[0] = a[1]*b[2] - a[2]*b[1]; v[1] = a[2]*b[0] - a[0]*b[2]; v[2] = a[0]*b[1] - a[1]*b[0]; return v; } inline vector3F operator *(const vector3F &a, const affine4F &t) { vector3F v(0); for (int i = 0; 3 > i; i++) { int j; for (j = 0; 3 > j; j++) { v[i] += a[j] * t[j][i]; } v[i] += t[j][i]; } return v; } inline affine4F translate(const vector4F &v) { affine4F t(1); for (int i = 0; 3 > i; i++) { t[3][i] = v[i]; } return t; } inline affine4F translate(const vector3F &v) { affine4F t(1); for (int i = 0; 3 > i; i++) { t[3][i] = v[i]; } return t; } inline affine4F rotateX(Float r) { affine4F t(1); t[1][1] = cosF(r); t[1][2] = sinF(r); t[2][1] = -sinF(r); t[2][2] = cosF(r); return t; } inline affine4F rotateY(Float r) { affine4F t(1); t[2][2] = cosF(r); t[2][0] = sinF(r); t[0][2] = -sinF(r); t[0][0] = cosF(r); return t; } inline affine4F rotateZ(Float r) { affine4F t(1); t[0][0] = cosF(r); t[0][1] = sinF(r); t[1][0] = -sinF(r); t[1][1] = cosF(r); return t; } /* __END__END__ */ /***********************************************************************/ #endif /*********************************************************************** * END OF affine ***********************************************************************/