MatrixTransformation.cxx
Go to the documentation of this file.00001 /* ======================================================================== 00002 * Copyright (c) 2006, 00003 * Institute for Computer Graphics and Vision 00004 * Graz University of Technology 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions are 00009 * met: 00010 * 00011 * Redistributions of source code must retain the above copyright notice, 00012 * this list of conditions and the following disclaimer. 00013 * 00014 * Redistributions in binary form must reproduce the above copyright 00015 * notice, this list of conditions and the following disclaimer in the 00016 * documentation and/or other materials provided with the distribution. 00017 * 00018 * Neither the name of the Graz University of Technology nor the names of 00019 * its contributors may be used to endorse or promote products derived from 00020 * this software without specific prior written permission. 00021 * 00022 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 00023 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 00024 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 00025 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 00026 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00027 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00028 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00029 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00030 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00031 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00032 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00033 * ======================================================================== 00034 * PROJECT: OpenTracker 00035 * ======================================================================== */ 00042 /* ======================================================================= */ 00043 00044 // this will remove the warning 4786 00045 #include "../tool/disable4786.h" 00046 00047 #include "MatrixTransformation.h" 00048 00049 namespace ot { 00050 00051 // default constructor method. 00052 00053 MatrixTransformation::MatrixTransformation() 00054 { 00055 for( int i = 0; i < 3; i++ ) 00056 for( int j = 0; j < 4; j++ ) 00057 if( i == j ) 00058 matrix[i][j] = 1; 00059 else 00060 matrix[i][j] = 0; 00061 } 00062 00063 // constructor methods. 00064 00065 MatrixTransformation::MatrixTransformation( float * matrix_[4] ) 00066 : Transformation() 00067 { 00068 for( int i = 0; i < 3; i ++ ) 00069 { 00070 for( int j = 0; j < 4; j ++ ) 00071 matrix[i][j] = matrix_[i][j]; 00072 } 00073 } 00074 00075 MatrixTransformation::MatrixTransformation( float * matrix_) 00076 : Transformation() 00077 { 00078 for( int i = 0; i < 3; i ++ ) 00079 { 00080 for( int j = 0; j < 4; j ++ ) 00081 matrix[i][j] = matrix_[4*i+j]; 00082 } 00083 } 00084 // transforms a event. 00085 00086 Event* MatrixTransformation::transformEvent( Event* event ) 00087 { 00088 00089 // transform the position of the event 00090 std::vector<float> &pos = event->getPosition(); 00091 localEvent.getPosition()[0] = matrix[0][0]*pos[0] + matrix[0][1]*pos[1] + matrix[0][2]*pos[2] + matrix[0][3]; 00092 localEvent.getPosition()[1] = matrix[1][0]*pos[0] + matrix[1][1]*pos[1] + matrix[1][2]*pos[2] + matrix[1][3]; 00093 localEvent.getPosition()[2] = matrix[2][0]*pos[0] + matrix[2][1]*pos[1] + matrix[2][2]*pos[2] + matrix[2][3]; 00094 00095 localEvent.getOrientation() = event->getOrientation(); 00096 00097 // copy other event fields 00098 localEvent.copyAllButStdAttr(*event); 00099 00100 localEvent.getButton() = event->getButton(); 00101 localEvent.getConfidence() = event->getConfidence(); 00102 localEvent.time = event->time; 00103 return &localEvent; 00104 } 00105 00106 } // namespace ot 00107 00108 00109 /* 00110 * ------------------------------------------------------------ 00111 * End of MatrixTransformation.cxx 00112 * ------------------------------------------------------------ 00113 * Automatic Emacs configuration follows. 00114 * Local Variables: 00115 * mode:c++ 00116 * c-basic-offset: 4 00117 * eval: (c-set-offset 'substatement-open 0) 00118 * eval: (c-set-offset 'case-label '+) 00119 * eval: (c-set-offset 'statement 'c-lineup-runin-statements) 00120 * eval: (setq indent-tabs-mode nil) 00121 * End: 00122 * ------------------------------------------------------------ 00123 */