147 lines
4.0 KiB
C++
Executable File
147 lines
4.0 KiB
C++
Executable File
/**********************************************************************
|
|
*<
|
|
FILE: point4.h
|
|
|
|
DESCRIPTION: Class definitions for Point4
|
|
|
|
CREATED BY: Dan Silva
|
|
|
|
HISTORY:
|
|
|
|
*> Copyright (c) 1994, All Rights Reserved.
|
|
**********************************************************************/
|
|
|
|
#ifndef _POINT4_H
|
|
|
|
#define _POINT4_H
|
|
|
|
#include "point3.h"
|
|
|
|
class DllExport Point4 {
|
|
public:
|
|
float x,y,z,w;
|
|
|
|
// Constructors
|
|
Point4(){}
|
|
Point4(float X, float Y, float Z, float W) { x = X; y = Y; z = Z; w = W; }
|
|
Point4(double X, double Y, double Z, double W) { x = (float)X; y = (float)Y; z = (float)Z; w = (float)W; }
|
|
Point4(int X, int Y, int Z, int W) { x = (float)X; y = (float)Y; z = (float)Z; w = (float)W; }
|
|
Point4(const Point3& a, float W=0.0f) { x = a.x; y = a.y; z = a.z; w = W; }
|
|
Point4(const Point4& a) { x = a.x; y = a.y; z = a.z; w = a.w; }
|
|
Point4(float af[4]) { x = af[0]; y = af[1]; z = af[2]; w = af[3]; }
|
|
|
|
// Data members
|
|
static const Point4 Origin;
|
|
static const Point4 XAxis;
|
|
static const Point4 YAxis;
|
|
static const Point4 ZAxis;
|
|
static const Point4 WAxis;
|
|
|
|
// Access operators
|
|
float& operator[](int i) { return (&x)[i]; }
|
|
const float& operator[](int i) const { return (&x)[i]; }
|
|
|
|
// Conversion function
|
|
operator float*() { return(&x); }
|
|
|
|
// Unary operators
|
|
Point4 operator-() const { return(Point4(-x,-y,-z, -w)); }
|
|
Point4 operator+() const { return *this; }
|
|
|
|
// Assignment operators
|
|
inline Point4& operator-=(const Point4&);
|
|
inline Point4& operator+=(const Point4&);
|
|
inline Point4& operator*=(float);
|
|
inline Point4& operator/=(float);
|
|
inline Point4& operator*=(const Point4&); // element-by-element multiply.
|
|
inline Point4& Set(float X, float Y, float Z, float W);
|
|
|
|
// Test for equality
|
|
int operator==(const Point4& p) const { return ((p.x==x)&&(p.y==y)&&(p.z==z)&&(p.w==w)); }
|
|
int operator!=(const Point4& p) const { return ((p.x!=x)||(p.y!=y)||(p.z!=z)||(p.w!=w)); }
|
|
int Equals(const Point4& p, float epsilon = 1E-6f);
|
|
|
|
// Binary operators
|
|
inline Point4 operator-(const Point4&) const;
|
|
inline Point4 operator+(const Point4&) const;
|
|
inline Point4 operator/(const Point4&) const;
|
|
inline Point4 operator*(const Point4&) const;
|
|
|
|
};
|
|
|
|
// Inlines:
|
|
|
|
inline Point4& Point4::operator-=(const Point4& a) {
|
|
x -= a.x; y -= a.y; z -= a.z; w -= a.w;
|
|
return *this;
|
|
}
|
|
|
|
inline Point4& Point4::operator+=(const Point4& a) {
|
|
x += a.x; y += a.y; z += a.z; w += a.w;
|
|
return *this;
|
|
}
|
|
|
|
inline Point4& Point4::operator*=(float f) {
|
|
x *= f; y *= f; z *= f; w *= f;
|
|
return *this;
|
|
}
|
|
|
|
inline Point4& Point4::operator/=(float f) {
|
|
if (f==0.0f) f = .000001f;
|
|
x /= f; y /= f; z /= f; w /= f;
|
|
return *this;
|
|
}
|
|
|
|
inline Point4& Point4::operator*=(const Point4& a) {
|
|
x *= a.x; y *= a.y; z *= a.z; w *= a.w;
|
|
return *this;
|
|
}
|
|
|
|
inline Point4& Point4::Set(float X, float Y, float Z, float W) {
|
|
x = X;
|
|
y = Y;
|
|
z = Z;
|
|
w = W;
|
|
return *this;
|
|
}
|
|
|
|
inline Point4 Point4::operator-(const Point4& b) const {
|
|
return(Point4(x-b.x,y-b.y,z-b.z, w-b.w));
|
|
}
|
|
|
|
inline Point4 Point4::operator+(const Point4& b) const {
|
|
return(Point4(x+b.x,y+b.y,z+b.z, w+b.w));
|
|
}
|
|
|
|
inline Point4 Point4::operator/(const Point4& b) const {
|
|
return Point4(x/b.x,y/b.y,z/b.z,w/b.w);
|
|
}
|
|
|
|
inline Point4 Point4::operator*(const Point4& b) const {
|
|
return Point4(x*b.x, y*b.y, z*b.z,w*b.w);
|
|
}
|
|
|
|
inline Point4 operator*(float f, const Point4& a) {
|
|
return(Point4(a.x*f, a.y*f, a.z*f, a.w*f));
|
|
}
|
|
|
|
inline Point4 operator*(const Point4& a, float f) {
|
|
return(Point4(a.x*f, a.y*f, a.z*f, a.w*f));
|
|
}
|
|
|
|
inline Point4 operator/(const Point4& a, float f) {
|
|
return(Point4(a.x/f, a.y/f, a.z/f, a.w/f));
|
|
}
|
|
|
|
inline Point4 operator+(const Point4& a, float f) {
|
|
return(Point4(a.x+f, a.y+f, a.z+f, a.w+f));
|
|
}
|
|
|
|
inline int Point4::Equals(const Point4& p, float epsilon) {
|
|
return (fabs(p.x - x) <= epsilon && fabs(p.y - y) <= epsilon
|
|
&& fabs(p.z - z) <= epsilon && fabs(p.w - w) <= epsilon);
|
|
}
|
|
|
|
#endif
|
|
|