first commit
This commit is contained in:
150
CS4451/proj5/structs.h
Normal file
150
CS4451/proj5/structs.h
Normal file
@@ -0,0 +1,150 @@
|
||||
#ifndef _STRUCTS_H_
|
||||
#define _STRUCTS_H_
|
||||
|
||||
#include <math.h>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <assert.h>
|
||||
|
||||
typedef struct Vector {
|
||||
float i;
|
||||
float j;
|
||||
float k;
|
||||
|
||||
inline float magnitude() {
|
||||
return sqrt(pow(i,2)+pow(j,2)+pow(k,2));
|
||||
}
|
||||
inline static void normalize(Vector* dest, Vector src) {
|
||||
float m = src.magnitude();
|
||||
dest->i = src.i / m;
|
||||
dest->j = src.j / m;
|
||||
dest->k = src.k / m;
|
||||
}
|
||||
|
||||
} Vector;
|
||||
|
||||
typedef struct Point {
|
||||
float x;
|
||||
float y;
|
||||
float z;
|
||||
std::vector<unsigned int> incidentTriangles;
|
||||
|
||||
Point() {
|
||||
x = y = z = 0;
|
||||
}
|
||||
|
||||
inline void printMe() {
|
||||
std::cout << "x: " << x << " y: " << y << " z: " << z;
|
||||
}
|
||||
|
||||
inline Point operator- (Point a) {
|
||||
Point temp;
|
||||
temp.x = x - a.x;
|
||||
temp.y = y - a.y;
|
||||
temp.z = z - a.z;
|
||||
return temp;
|
||||
}
|
||||
inline float magnitude() {
|
||||
return sqrt(pow(x,2)+pow(y,2)+pow(z,2));
|
||||
}
|
||||
inline static void normalize(Point* dest, Point src) {
|
||||
float m = src.magnitude();
|
||||
dest->x = src.x / m;
|
||||
dest->y = src.y / m;
|
||||
dest->z = src.z / m;
|
||||
}
|
||||
inline Point operator+ (Point p) {
|
||||
Point t;
|
||||
t.x = x + p.x;
|
||||
t.y = y + p.y;
|
||||
t.z = z + p.z;
|
||||
return t;
|
||||
}
|
||||
inline void operator+= (Point p) {
|
||||
x += p.x;
|
||||
y += p.y;
|
||||
z += p.z;
|
||||
}
|
||||
inline void operator+= (int i) {
|
||||
x += i;
|
||||
y += i;
|
||||
z += i;
|
||||
}
|
||||
inline Point operator* (Point p) {
|
||||
Point t;
|
||||
t.x = x * p.x;
|
||||
t.y = y * p.y;
|
||||
t.z = z * p.z;
|
||||
return t;
|
||||
}
|
||||
inline Point operator* (float f) {
|
||||
Point t;
|
||||
t.x = x * f;
|
||||
t.y = y * f;
|
||||
t.z = z * f;
|
||||
return t;
|
||||
}
|
||||
inline Point operator/ (float f) {
|
||||
Point t;
|
||||
t.x = x / f;
|
||||
t.y = y / f;
|
||||
t.z = z / f;
|
||||
return t;
|
||||
}
|
||||
|
||||
} Point;
|
||||
|
||||
typedef struct Triangle {
|
||||
Vector normal;
|
||||
int a1;
|
||||
int a2;
|
||||
int a3;
|
||||
|
||||
inline bool contains(int a) {
|
||||
return (a == a1 || a == a2 || a == a3);
|
||||
}
|
||||
|
||||
inline int indexOf(int n1, int n2) {
|
||||
if ((a1 == n1 || a1 == n2) && (a2 == n1 || a2 == n2)) {
|
||||
return 3;
|
||||
} else if ((a2 == n1 || a2 == n2) && (a3 == n1 || a3 == n2)) {
|
||||
return 1;
|
||||
} else if ((a3 == n1 || a3 == n2) && (a1 == n1 || a1 == n2)) {
|
||||
return 2;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
inline bool operator== (Triangle t) {
|
||||
return (a1 == t.a1) && (a2 == t.a2) && (a3 == t.a3);
|
||||
}
|
||||
} Triangle;
|
||||
|
||||
typedef struct Adjacency {
|
||||
int a1;
|
||||
int a2;
|
||||
int a3;
|
||||
inline bool contains(int i) {
|
||||
if (a1 == i || a2 == i || a3 == i) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
inline void push(int i, int in1, int in2) {
|
||||
if (a1 != in1 && a1 != in2) {
|
||||
a1 = i;
|
||||
} else if (a2 != in1 && a2 != in2) {
|
||||
a2 = i;
|
||||
} else if (a3 != in1 && a3 != in2) {
|
||||
a3 = i;
|
||||
}
|
||||
#ifdef _DEBUG
|
||||
else {
|
||||
assert(NULL != NULL);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
} Adjacency;
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user