#ifndef POSITIONS_H #define POSITIONS_H class Position { public: // Initialize a position. It consists of a radius expressed in meters // and an angle expressed in radians. Position (); // radius = 1, angle = 0. Position (float r); // angle = 0. Position (float r, float thetaInRadians); // Reinitialize this position. void SetAbsolutePosition (float r, float thetaInRadians); // Change this position, incrementing the radius by rChange and // incrementing the angle by angularDistChange/myRadius. // angularDistChange is expressed in meters. // One of the two arguments must be 0. // Negative radius values represent movement toward the statue. // Positive distance changes represent counterclockwise motion; // negative values are clockwise. void IncrementPosition (float rChange, float angularDistChange); // Print this position. void Print ( ); // Return true if someone at this position can see someone or // something at the argument position (i.e. the statue does // not block one's view), and return false otherwise. // The argument position must be at the statue. bool Sees (Position pos); // Return true if this position is at the base of the statue, // i.e. its radius is 1, and return false otherwise. bool IsAtStatue ( ); // Return true if this position is between the first argument // position and the second. Precondition: the counterclockwise // difference between the first and second argument positions // is less than pi radians, and the radii of all the positions // are the same. bool IsBetween (Position pos1, Position pos2); private: float myRadius; float myAngleInRadians; }; #endif