void set(Vector2& v){ x - v.x: у - v.y:}
void setDiff(Point2& a. Point2& b)//set to difference a - b
{x - a.x - b.x: у - а.у - b.y:}
void normalize()//adjust this vector to unit length
{ double sizeSq - x*x + y*y:
if(sizeSq < 0.0000001)
{
cerr « "NnnormalizeO sees vector (0.0)!": return:
// does nothing to zero vectors: // не делает ничего для обнуления векторов }
float scaleFactor - 1.0/(float)sqrt(sizeSq): х *= scaleFactor: у * scaleFactor:
}
Vector2(float XX. float yy){x - xx; у - yy: } Vector2(Vector2& v){x - v.x; у - v.y: } Vector2(){x - у - 0:} //default constructor float dot(Vector2 b) // return this dotted with b {return x * b.x + у * b.y:} void perpO // perp this vector {float tmp - x: x - -у: у - tmp:}
float perpDot(Vector2& v) // return perp of this dotted with v {return x *v.x - у * v.y:}
}:
//«««««««««« Canvas class »>»»»»
// a global Canvas object (described in Chapter 3) knows how to draw lines in world coordinates and to perform turtlegraphics
// глобальный объект класса Canvas (описан в главе 3). // Он знает, как рисовать прямые в мировых координатах
В1. Классы для двумерной графики
// и как работать с черепашьей графикой class Canvas { private:
Point2 CP; // current position in world // текущее положение в мировых координатах
float CD: // current direction in degrees // текущее направление в градусах public:
float windowAspect:
Canvasdnt width, int height, char* title):
void setWindow(float 1. float r. float b. float t):
void setViewport(int 1. int r. int b. int t):
float getWindowAspect(void) { return windowAspect:}
void lineTo(float x. float y):
void moveTo(float x, float y){CP.x - x: СР.у - у:)
void turn(float ang) {CD +- ang:}
void turnTo(float ang) {CD - ang;}
void forward(float dist, int vis):
void initCTO // initialize the CT (model view matrix) // инициализируем CT (матрицу моделирования-просмотра) {
glMatrixMode(GL MODELVIEW): glLoadldentityO: