00001
00002
00003
00004
00005
00007
00008 #ifndef HGETRIANGLE__
00009 #define HGETRIANGLE__
00010
00011 #include "hgeLine.h"
00012
00013 #define hgeAbs(v) (v < 0 ? -v : v)
00014
00016
00017
00018 class hgeTriangle
00019 {
00020 public:
00021
00022 hgeTriple * Triple;
00023 hgeVector vert[3];
00024
00025 hgeVector GetSize()
00026 {
00027 float mnx, mxx = 0;
00028 float mny, mxy = 0;
00029 mnx = vert[0].x;
00030 mxx = vert[0].x;
00031 mny = vert[0].y;
00032 mxy = vert[0].y;
00033
00034 for ( int i = 1; i < 3; i++ )
00035 {
00036 if ( vert[i].x < mnx ) mnx = vert[i].x;
00037 if ( vert[i].x > mxx ) mxx = vert[i].x;
00038 if ( vert[i].y < mny ) mny = vert[i].y;
00039 if ( vert[i].y > mxy ) mxy = vert[i].y;
00040 }
00041 return hgeVector(mxx - mnx, mxy - mny);
00042 }
00043
00044 bool Contains(hgeVector point)
00045 {
00046 hgeVector Size = GetSize();
00047 if ( Intercepts(point, point + hgeVector(-hgeAbs(Size.x), 0.1f)).collides
00048 && Intercepts(point, point + hgeVector(0.1f, -hgeAbs(Size.y))).collides
00049 && Intercepts(point, point + hgeVector(hgeAbs(Size.x), 0.1f)).collides
00050 && Intercepts(point, point + hgeVector(0.1f, hgeAbs(Size.y))).collides
00051 ) return true;
00052 return false;
00053 }
00054
00055 hgeIntersect Intercepts(hgeVector point1, hgeVector point2)
00056 {
00057 return Intercepts( hgeLine(point1, point2) );
00058 }
00059
00060 hgeIntersect Intercepts(hgeLine line)
00061 {
00062 hgeIntersect dat = line.Intersects(hgeLine(vert[0], vert[1]));
00063 if ( !dat.collides)
00064 {
00065 dat = line.Intersects(hgeLine(vert[1], vert[2]));
00066 if ( !dat.collides)
00067 {
00068 dat = line.Intersects(hgeLine(vert[2], vert[0]));
00069 }
00070 }
00071 return dat;
00072 }
00073
00074 hgeTriangle(hgeVector verticies[3])
00075 {
00076 Triple = new hgeTriple();
00077
00078 Triple->v[0].z = 0.5;
00079 Triple->v[1].z = 0.5;
00080 Triple->v[2].z = 0.5;
00081
00082 Triple->v[0].col = 0xFFFFFFFF;
00083 Triple->v[1].col = 0xFFFFFFFF;
00084 Triple->v[2].col = 0xFFFFFFFF;
00085
00086 Triple->blend = BLEND_DEFAULT;
00087 for ( int i = 0; i < 3; i++ )
00088 {
00089 vert[i] = verticies[i];
00090 }
00091
00092 }
00093
00094 hgeTriangle(hgeVector v1, hgeVector v2, hgeVector v3)
00095 {
00096 Triple = new hgeTriple();
00097 Triple->v[0].z = 0.5;
00098 Triple->v[1].z = 0.5;
00099 Triple->v[2].z = 0.5;
00100
00101 Triple->v[0].col = 0xFFFFFFFF;
00102 Triple->v[1].col = 0xFFFFFFFF;
00103 Triple->v[2].col = 0xFFFFFFFF;
00104
00105 Triple->blend = BLEND_DEFAULT;
00106
00107 vert[0] = v1;
00108 vert[1] = v2;
00109 vert[2] = v3;
00110
00111 }
00112
00113 ~hgeTriangle()
00114 {
00115 if ( Triple )
00116 delete Triple;
00117 }
00118 };
00119
00120 #endif