vector.cpp vector.h OpenArena #include"vector.h" namespaceOpenArena{ Vec3d::Vec3d() { x=0.0f; y=0.0f; z=0.0f; } Vec3d::Vec3d(constVec3d&orig) { operator=(orig); } Vec3d::Vec3d(doublexr=0,doublezr=0) { x=(double)sin(90-xr); y=(double)sin(xr); z=(double)(y*tan(zr)); } Vec3d::Vec3d(doubleX,doubleY,doubleZ) { x=X; y=Y; z=Z; } doubleVec3d::lengthsquared()const { return(x*x+y*y+z*z); } doubleVec3d::length()const { return(double)sqrt(lengthsquared()); } voidVec3d::normalize() { x/=length(); y/=length(); z/=length(); } voidVec3d::operator=(constVec3d&v) { x=v.x; y=v.y; z=v.z; } Vec3dVec3d::cross(constVec3d&v)const { returnVec3d(y*v.z-z*v.y,z*v.x-x*v.z,x*v.y-y*v.x); } Vec3dVec3d::operator*(constVec3d&v)const { returnVec3d(y*v.z-z*v.y,z*v.x-x*v.z,x*v.y-y*v.x); } Vec3dVec3d::operator+(constVec3d&v)const { returnVec3d(x+v.x,y+v.y,z+v.z); } Vec3dVec3d::operator*(doublef)const { returnVec3d(x*f,y*f,z*f); } Vec3dVec3d::operator-(constVec3d&v)const { returnVec3d(x-v.x,y-v.y,z-v.z); } Vec3dVec3d::operator/(doublek)const { returnVec3d(x/k,y/k,z/k); } Vec3dVec3d::normalized()const { returnVec3d(x/length(),y/length(),z/length()); } Vec2f::Vec2f() { x=0; y=0; } Vec2f::Vec2f(constVec2f&rtOp) { x=rtOp.x; y=rtOp.y; } Vec2fVec2f::cross(constVec2f&rtOp)const { returnVec2f(y-rtOp.y,rtOp.x-x); } doubleVec2f::length()const { returnsqrt(x*x+y*y); } doubleVec2f::lengthsquared()const { return(x*x+y*y); } voidVec2f::normalize() { x/=(float)length(); y/=(float)length(); } Vec2fVec2f::normalized()const { returnVec2f(x/length(),y/length()); } Vec2fVec2f::operator*(doublertOp)const { returnVec2f(x*rtOp,y*rtOp); } Vec2fVec2f::operator+(constVec2f&rtOp)const { returnVec2f(x+rtOp.x,y+rtOp.y); } Vec2fVec2f::operator*(constVec2f&rtOp)const { returnVec2f(x*rtOp.x,y*rtOp.y); } Vec2fVec2f::operator-(constVec2f&rtOp)const { returnVec2f(x-rtOp.x,y-rtOp.y); } Vec2fVec2f::operator/(doublertOp)const { returnVec2f(x/rtOp,y/rtOp); } Vec2fVec2f::operator=(constVec2f&rtOp) { x=rtOp.x; y=rtOp.y; returnVec2f(x,y); } Vec2f::Vec2f(doubleX,doubleY) { x=(float)X; y=(float)Y; } Vec2i::Vec2i() { x=0; y=0; } Vec2i::Vec2i(constVec2i&rtOp) { x=rtOp.x; y=rtOp.y; } Vec2iVec2i::cross(constVec2i&rtOp)const { returnVec2i(y-rtOp.y,rtOp.x-x); } intVec2i::length()const { return(int)sqrt((float)(x*x+y*y)); } intVec2i::lengthsquared()const { return(x*x+y*y); } voidVec2i::normalize() { x/=length(); y/=length(); } Vec2iVec2i::normalized()const { returnVec2i(x/length(),y/length()); } Vec2iVec2i::operator*(intrtOp)const { returnVec2i(x*rtOp,y*rtOp); } Vec2iVec2i::operator+(constVec2i&rtOp)const { returnVec2i(x+rtOp.x,y+rtOp.y); } Vec2iVec2i::operator*(constVec2i&rtOp)const { returnVec2i(x*rtOp.x,y*rtOp.y); } Vec2iVec2i::operator-(constVec2i&rtOp)const { returnVec2i(x-rtOp.x,y-rtOp.y); } Vec2iVec2i::operator/(intrtOp)const { returnVec2i(x/rtOp,y/rtOp); } Vec2iVec2i::operator=(constVec2i&rtOp) { x=rtOp.x; y=rtOp.y; returnVec2i(x,y); } Vec2i::Vec2i(intX,intY) { x=X; y=Y; } boolVec2i::operator==(constVec2i&rtOp)const { returnx==rtOp.x&&y==rtOp.y; } boolVec2i::operator!=(constVec2i&rtOp)const { return!(x==rtOp.x&&y==rtOp.y); } };