#ifndef SHAPE_H #define SHAPE_H #include "geometry.h" inline float max(float f1, float f2) {return f1>f2 ? f1: f2;} inline float max(float f1, float f2, float f3) {return max(max(f1,f2),f3);} using namespace std; class Triangle { public: Triangle() {} Triangle(Tuple& v1, Tuple& v2, Tuple& v3); Triangle(Tuple& v1, Tuple& v2, Tuple& v3, Tuple col); Triangle(const Triangle& toCopy); virtual ~Triangle() {}; Triangle& operator = (const Triangle& toCopy); Tuple& operator [] (int index); const Tuple& operator [](int index) const; void drawRainbow(); void drawRandom(); void draw(); Triangle standardize(float forward[], float back[]) const; void computeNormal(); private: Tuple u[3]; Tuple color; }; class Edge { public: Edge() {}; Edge(Tuple v1, Tuple v2); Edge(const Edge& toCopy) {u[0]=toCopy.u[0], u[1]=toCopy.u[1];} virtual ~Edge() {}; Edge& operator = (const Edge& toCopy); Tuple& operator [] (int index); const Tuple& operator [](int index) const; Edge standardize(float forward[], float back[]) const; private: Tuple u[2]; }; #endif