Shapes2d.h

Go to the documentation of this file.
00001 
00011 #pragma once
00012 
00013 #include "MatrixTypes.h"
00014 
00016 class Shape2d { };
00017 
00018 
00025 template< typename T >
00026 class Rect : public Shape2d
00027 {
00028     public:
00029         Rect() {}
00030         Rect (T left_in, T right_in, T top_in, T bottom_in)
00031         {
00032             left = left_in; 
00033             right = right_in;
00034             top = top_in;
00035             bottom = bottom_in;
00036         }
00037         
00038         void expandToEnclosePoint (T x, T y)
00039         {
00040             left   = MIN (x, left);
00041             bottom = MIN (y, bottom);
00042             
00043             right  = MAX (x, right);
00044             top    = MAX (y, top);
00045         }
00046 
00047         Rect< T > intersectRect (const Rect< T > &r)
00048         {
00049             Rect< T > result;
00050             result.left   = MAX (left, r.left);
00051             result.bottom = MAX (bottom, r.bottom);
00052 
00053             result.right  = MIN (right, r.right);
00054             result.top    = MIN (top, r.top);
00055 
00056             return result;
00057         }
00058 
00059         bool hasPositiveArea()
00060         {
00061             return (right > left && top > bottom);
00062         }
00063         
00064         T left, right;
00065         T top, bottom;
00066 };
00067 
00068 
00069 
00070 
00072 template< typename T >
00073 class LineSegment : public Shape2d
00074 {
00075 public:
00076     typedef LineSegment< T > type;
00077     LineSegment(T P_in, T Q_in)
00078     {
00079         P = P_in;
00080         Q = Q_in;
00081 
00082         T r = P + Q;
00083     }
00084 
00085     type lerp(float t, const type & otherLine)
00086     {
00087         T newP = P.linearlyInterpolate (otherLine.P, t);
00088         T newQ = Q.linearlyInterpolate (otherLine.Q, t);
00089 
00090         return LineSegment< T >(newP, newQ);
00091     }
00092 
00093     void scale (float xScalingFactor, float yScalingFactor)
00094     {
00095         Q[0] *= xScalingFactor;
00096         Q[1] *= yScalingFactor;
00097 
00098         P[0] *= xScalingFactor;
00099         P[1] *= yScalingFactor;
00100     }
00101 
00102     T P;
00103     T Q;
00104 };

Generated on Tue May 21 03:34:51 2002 for Archimedes by doxygen1.2.15