📄 vector.cpp
字号:
// VECTOR.cpp: implementation of the VECTOR class.////////////////////////////////////////////////////////////////////////#include <cmath>#include "VECTOR.h"// This class VECTOR comes from an article about rigid body// animation published on www.gamasutra.com so it may// follow its own license. Please check gamasutra at// http://www.gamasutra.com/features/19990702/data_structures_01.htm// or just write your own to replace it.//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////SCALAR& VECTOR::operator [] ( const long i ){ return *((&x) + i);}//compareconst bool VECTOR::operator == ( const VECTOR& v ) const{ return (v.x==x && v.y==y && v.z==z);}const bool VECTOR::operator != ( const VECTOR& v ) const{ return !(v == *this);}//negateconst VECTOR VECTOR::operator - () const{ return VECTOR( -x, -y, -z );}//assignconst VECTOR& VECTOR::operator = ( const VECTOR& v ){ x = v.x; y = v.y; z = v.z; return *this;}//incrementconst VECTOR& VECTOR::operator += ( const VECTOR& v ) { x+=v.x; y+=v.y; z+=v.z; return *this;} //decrementconst VECTOR& VECTOR::operator -= ( const VECTOR& v ) { x-=v.x; y-=v.y; z-=v.z; return *this;} //self-multiplyconst VECTOR& VECTOR::operator *= ( const SCALAR& s ){ x*=s; y*=s; z*=s; return *this;}//self-divideconst VECTOR& VECTOR::operator /= ( const SCALAR& s ){ const SCALAR r = 1 / s; x *= r; y *= r; z *= r; return *this;}//addconst VECTOR VECTOR::operator + ( const VECTOR& v ) const{ return VECTOR(x + v.x, y + v.y, z + v.z);}//subtractconst VECTOR VECTOR::operator - ( const VECTOR& v ) const{ return VECTOR(x - v.x, y - v.y, z - v.z);}//post-multiply by a scalarconst VECTOR VECTOR::operator * ( const SCALAR& s ) const{ return VECTOR( x*s, y*s, z*s );}//divideconst VECTOR VECTOR::operator / (SCALAR s) const{ s = 1/s; return VECTOR( s*x, s*y, s*z );}//cross productconst VECTOR VECTOR::cross( const VECTOR& v ) const{ //Davis, Snider, "Introduction to Vector Analysis", p. 44 return VECTOR( y*v.z - z*v.y, z*v.x - x*v.z, x*v.y - y*v.x );}//scalar dot productconst SCALAR VECTOR::dot( const VECTOR& v ) const{ return x*v.x + y*v.y + z*v.z;}//lengthconst SCALAR VECTOR::length() const{ return (SCALAR)sqrt( (double)this->dot(*this) );}//unit vectorconst VECTOR VECTOR::unit() const{ return (*this) / length();}//make this a unit vectorvoid VECTOR::normalize(){ (*this) /= length();}//equal within an error econst bool VECTOR::nearlyEquals( const VECTOR& v, const SCALAR e ) const{ return fabs(x-v.x)<e && fabs(y-v.y)<e && fabs(z-v.z)<e;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -