home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 21
/
CD_ASCQ_21_040595.iso
/
dos
/
graphic
/
font3d11
/
f3d_src
/
vector.h
< prev
Wrap
C/C++ Source or Header
|
1994-09-09
|
5KB
|
196 lines
//=================================================================================================
// Vector.H
//
// Copyright (c) 1994 by Todd A. Prater
// All rights reserved.
//
//-------------------------------------------------------------------------------------------------
//
// A vector class.
//
// Constructors:
//
// VECTOR(void)
// VECTOR(DOUBLE,DOUBLE,DOUBLE)
// VECTOR(VECTOR&)
//
// Member Operators:
//
// += Assign Sum
// -= Assign Difference
// *= Assign Product
// /= Assign Quotient
//
// Non-Member Operators:
//
// + Sum Binary (VECTOR + VECTOR) -> VECTOR
// - Difference Binary (VECTOR - VECTOR) -> VECTOR
// * Scale Binary (VECTOR * DOUBLE) -> VECTOR
// * Scale Binary (DOUBLE * VECTOR) -> VECTOR
// / Scale Binary (VECTOR / DOUBLE) -> VECTOR
// % Dot Product Binary (VECTOR % VECTOR) -> DOUBLE
// ^ Cross Product Binary (VECTOR ^ VECTOR) -> VECTOR
// ~ Normalize Unary (~VECTOR) -> VECTOR
// - Negative Unary (-VECTOR) -> VECTOR
//
// == Equal to Binary (VECTOR == VECTOR) -> INT
// != Not equal to Binary (VECTOR !- VECTOR) -> INT
//
// >> Insertion Binary (ostream& >> VECTOR&) -> ostream&
//
// Non-Member Functions:
//
// dist(VECTOR x, VECTOR y) ...... Returns the distance between x and y.
//
//
//=================================================================================================
#ifndef __Vector_H__
#define __Vector_H__
#include <math.h>
#include <iostream.h>
#include "Config.H"
class VECTOR
{
public: DOUBLE x,y,z;
VECTOR ();
VECTOR (const DOUBLE& _x, const DOUBLE& _y, const DOUBLE& _z);
VECTOR (const VECTOR& v);
VECTOR& operator += (const VECTOR& v);
VECTOR& operator -= (const VECTOR& v);
VECTOR& operator *= (const DOUBLE& f);
VECTOR& operator /= (const DOUBLE& f);
};
//_____ CONSTRUCTORS _____
inline VECTOR::VECTOR(void)
{
x=0;y=0;z=0;
}
inline VECTOR::VECTOR(const DOUBLE& _x, const DOUBLE& _y, const DOUBLE& _z)
{
x=_x;y=_y;z=_z;
}
inline VECTOR::VECTOR(const VECTOR& v)
{
x=v.x;y=v.y;z=v.z;
}
//_____ NON-MEMBER FUNCTIONS _____
inline VECTOR operator + (VECTOR v1, VECTOR v2)
{
return VECTOR(v1.x+v2.x,v1.y+v2.y,v1.z+v2.z);
}
inline VECTOR operator - (VECTOR v1, VECTOR v2)
{
return VECTOR(v1.x-v2.x,v1.y-v2.y,v1.z-v2.z);
}
inline VECTOR operator * (VECTOR v, DOUBLE f)
{
return VECTOR(v.x*f,v.y*f,v.z*f);
}
inline VECTOR operator * (DOUBLE f, VECTOR v)
{
return VECTOR(v.x*f,v.y*f,v.z*f);
}
inline VECTOR operator / (VECTOR v, DOUBLE f)
{
return VECTOR(v.x/f,v.y/f,v.z/f);
}
inline DOUBLE operator % (VECTOR v1, VECTOR v2)
{
return (v1.x*v2.x+v1.y*v2.y+v1.z*v2.z);
}
inline VECTOR operator ^ (VECTOR v1, VECTOR v2)
{
DOUBLE tx = v1.y*v2.z - v1.z*v2.y;
DOUBLE ty = v1.z*v2.x - v1.x*v2.z;
DOUBLE tz = v1.x*v2.y - v1.y*v2.x;
return VECTOR(tx,ty,tz);
}
inline VECTOR operator ~ (VECTOR v)
{
DOUBLE mag = sqrt(v.x*v.x + v.y*v.y + v.z*v.z);
DOUBLE tx = v.x/mag;
DOUBLE ty = v.y/mag;
DOUBLE tz = v.z/mag;
return VECTOR(tx,ty,tz);
}
inline VECTOR operator - (VECTOR v)
{
return VECTOR(-v.x,-v.y,-v.z);
}
inline int operator == (VECTOR v1, VECTOR v2)
{
return (v1.x==v2.x&&v1.y==v2.y&&v1.z==v2.z);
}
inline int operator != (VECTOR v1, VECTOR v2)
{
return (v1.x!=v2.x&&v1.y!=v2.y&&v1.z!=v2.z);
}
inline DOUBLE dist (VECTOR v1, VECTOR v2)
{
VECTOR d = v2-v1;
return (sqrt(d%d));
}
//_____ MEMBER SHORTHAND OPERATORS _____
inline VECTOR& VECTOR::operator += (const VECTOR& v)
{
x+=v.x; y+=v.y; z+=v.z;
return *this;
}
inline VECTOR& VECTOR::operator -= (const VECTOR& v)
{
x-=v.x; y-=v.y; z-=v.z;
return *this;
}
inline VECTOR& VECTOR::operator *= (const DOUBLE& f)
{
x*=f; y*=f; z*=f;
return *this;
}
inline VECTOR& VECTOR::operator /= (const DOUBLE& f)
{
x/=f; y/=f; z/=f;
return *this;
}
inline ostream& operator << (ostream& s, const VECTOR& v)
{
s<<"<"<<v.x<<","<<v.y<<","<<v.z<<">";
return s;
}
#endif