/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */ /* $Id: vctMatrixRotation2Base.cpp,v 1.5 2007/04/26 19:33:57 anton Exp $ Author(s): Anton Deguet Created on: 2005-12-01 (C) Copyright 2005-2007 Johns Hopkins University (JHU), All Rights Reserved. --- begin cisst license - do not edit --- This software is provided "as is" under an open source license, with no warranty. The complete license can be found in license.txt and http://www.cisst.org/cisst/license.txt. --- end cisst license --- */ #include template <> const vctMatrixRotation2Base > & vctMatrixRotation2Base >::Identity() { static const ThisType result(1.0, 0.0, 0.0, 1.0); return result; } template <> const vctMatrixRotation2Base > & vctMatrixRotation2Base >::Identity() { static const ThisType result(1.0f, 0.0f, 0.0f, 1.0f); return result; } template vctMatrixRotation2Base<_containerType> & vctMatrixRotation2Base<_containerType>::FromRaw(const vctAngleRotation2 & angleRotation) { typedef typename _containerType::value_type value_type; const typename vctAngleRotation2::AngleType angle = angleRotation.Angle(); const value_type sinAngle = value_type(sin(angle)); const value_type cosAngle = value_type(cos(angle)); // first column this->Element(0, 0) = cosAngle; this->Element(1, 0) = -sinAngle; // second column this->Element(0, 1) = sinAngle; this->Element(1, 1) = cosAngle; return *this; } // specialize for fixed size matrices template <> vctMatrixRotation2Base > & vctMatrixRotation2Base >::NormalizedSelf(void) { this->FromRaw(vctAngleRotation2(*this, VCT_DO_NOT_NORMALIZE)); return *this; } template <> vctMatrixRotation2Base > & vctMatrixRotation2Base >::NormalizedSelf(void) { this->FromRaw(vctAngleRotation2(*this, VCT_DO_NOT_NORMALIZE)); return *this; } // force the instantiation of the templated classes template class vctMatrixRotation2Base >; template class vctMatrixRotation2Base >; template <> const vctMatrixRotation2Base > & vctMatrixRotation2Base >::Identity() { static const ThisType result(1.0, 0.0, 0.0, 1.0); return result; } template <> vctMatrixRotation2Base > & vctMatrixRotation2Base >::NormalizedSelf(void) { this->FromRaw(vctAngleRotation2(*this, VCT_DO_NOT_NORMALIZE)); return *this; } template <> const vctMatrixRotation2Base > & vctMatrixRotation2Base >::Identity() { static const ThisType result(1.0f, 0.0f, 0.0f, 1.0f); return result; } template <> vctMatrixRotation2Base > & vctMatrixRotation2Base >::NormalizedSelf(void) { this->FromRaw(vctAngleRotation2(*this, VCT_DO_NOT_NORMALIZE)); return *this; } // force instantiation for dynamic containers, this is used for Python wrappers template class vctMatrixRotation2Base >; template class vctMatrixRotation2Base >; // **************************************************************************** // Change History // **************************************************************************** // // $Log: vctMatrixRotation2Base.cpp,v $ // Revision 1.5 2007/04/26 19:33:57 anton // All files in libraries: Applied new license text, separate copyright and // updated dates, added standard header where missing. // // Revision 1.4 2007/01/24 03:10:22 anton // vctMatrixRotation2: Simplified class structure by removing derived class // and re-implementation of constructors. End user types are defined with a // simpler typedef. See ticket #263. // // Revision 1.3 2007/01/23 20:59:27 anton // cisstVector: Updated transformations classes so that non const methods // returning a reference on "this" return a non const reference. This follows // ticket #259. // // Revision 1.2 2006/11/20 20:33:19 anton // Licensing: Applied new license to cisstCommon, cisstVector, cisstNumerical, // cisstInteractive, cisstImage and cisstOSAbstraction. // // Revision 1.1 2005/12/01 22:11:58 anton // cisstVector: 2D transformations, added a base class for rotation matrix 2. // // // ****************************************************************************