2013-02-16 16:14:39 -08:00

114 lines
1.9 KiB
C++

#include <math.h>
#include <stdio.h>
#include "gpoint.h"
GPoint::GPoint() {
x = 0;
y = 0;
z = 0;
}
GPoint::GPoint(VERTEX &v) {
x = v.x;
y = v.y;
z = v.z;
}
GPoint::GPoint(float ix, float iy, float iz) {
x = ix;
y = iy;
z = iz;
}
GPoint::GPoint(const GPoint &them) {
x = them.x;
y = them.y;
z = them.z;
}
//dot of x,y,z
float GPoint::dot3(const GPoint &them) const {
return((x * them.x) + (y * them.y) +
(z * them.z));
}
//cross product
GPoint GPoint::cross(const GPoint &them) const {
return(GPoint(y * them.z - z * them.y,
z * them.x - x * them.z,
x * them.y - y * them.x));
}
const GPoint &GPoint::operator+=(const GPoint &them) {
x += them.x;
y += them.y;
z += them.z;
return(*this);
}
const GPoint &GPoint::operator*=(const float num) {
x *= num;
y *= num;
z *= num;
return(*this);
}
GPoint operator-(const GPoint &v1, const GPoint &v2) {
return(GPoint(v1.x - v2.x, v1.y - v2.y, v1.z - v2.z));
}
//ordering on X only
bool operator<(const GPoint &v1, const GPoint &v2) {
return(v1.x < v2.x);
}
//ordering on X only
bool operator>(const GPoint &v1, const GPoint &v2) {
return(v1.x > v2.x);
}
GVector::GVector() : GPoint() {
W = 0;
}
GVector::GVector(const GPoint &them) : GPoint(them) {
W = 1.0f;
}
GVector::GVector(const GPoint &from, const GPoint &to)
: GPoint(to.x - from.x, to.y - from.y, to.z - from.z)
{
W = 1.0f;
}
GVector::GVector(float x, float y, float z, float w) : GPoint(x, y, z) {
W = w;
}
//dot product of x,y,z,w
float GVector::dot4(const GVector &them) const {
return((x * them.x) + (y * them.y) +
(z * them.z) + (W * them.W));
}
//dot product of x,y,z+w
float GVector::dot4(const GPoint &them) const {
return((x * them.x) + (y * them.y) +
(z * them.z) + W);
}
float GVector::length() {
return(sqrt((x * x) + (y * y) + (z * z)));
}
void GVector::normalize() {
float len = length(); //stupid square roots take forever
x /= len;
y /= len;
z /= len;
}