/********************************************************************/ /* Copyright (c) 2017 System fugen G.K. and Yuzi Mizuno */ /* All rights reserved. */ /********************************************************************/ #include "MGCLStdAfx.h" #include "mg/Unit_vector.h" #include "mg/Tolerance.h" #include "mg/Default.h" #if defined(_DEBUG) #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // MGUnit_vector.cc // Implementation of MGUnit_vector // //Constructor // // void コンストラクタ MGUnit_vector::MGUnit_vector(int sdim):MGVector(0.0, 0.0, 1.0){ assert(sdim>0); if(sdim!=3){ resize(sdim); int sdimm1=sdim-1; for(int i=2; idz){ if(dx>dy) v1=MGVector(0.,1.,0.); else v1=MGVector(0.,0.,1.); }else if(dy>dz) v1=MGVector(0.,0.,1.); } // Normalize m and n. v2=(*this)*v1; v1=v2*(*this); }else{ v2=v; v1=v2*(*this); } } // // 演算子定義 // // Assignment From Vector. MGUnit_vector& MGUnit_vector::operator= (const MGVector& vec2){ if(vec2.is_unit_vector()) MGVector::operator= (vec2); else MGVector::operator= (vec2.normalize()); return *this; } //Update vector data by array of double. //The result is unit of the updated vector. MGUnit_vector& MGUnit_vector::operator=(const double* array){ MGVector vec(sdim(),array); return *this=vec; } //Update the unit vector by adding vec2. The result is unit of the vector //of two vector addition. MGUnit_vector& MGUnit_vector::operator+= (const MGVector& vec2){ return *this=(*this+vec2); } // 単項マイナス。自身の単位ベクトルを反転したオブジェクトを生成する MGUnit_vector MGUnit_vector::operator- () const{ int dim=sdim(); MGUnit_vector temp(*this); for(int i=0; i