Ниже приведен фрагмент кода, который рисует три указанные выше линии.
const int xmax = 600; // размер окна
const int ymax = 400;
const int x_orig = xmax/2; // точка (0,0) — это центр окна
const int y_orig = ymax/2;
const Point orig(x_orig,y_orig);
const int r_min = –10; // диапазон [–10:11)
const int r_max = 11;
const int n_points = 400; // количество точек в диапазоне
const int x_scale = 30; // масштабные множители
const int y_scale = 30;
Simple_window win(Point(100,100),xmax,ymax,"Function graphing");
Function s(one,r_min,r_max,orig,n_points,x_scale,y_scale);
Function s2(slope,r_min,r_max,orig,n_points,x_scale,y_scale);
Function s3(square,r_min,r_max,orig,n_points,x_scale,y_scale);
win.attach(s);
win.attach(s2);
win.attach(s3);
win.wait_for_button();
Сначала определяем несколько констант, чтобы не перегружать нашу программу “магическими константами”. Затем создаем окно, определяем функции, связываем их с окном и передаем контроль графической системе, которая выполняет реальное рисование на экране.
Все это делается по шаблону, за исключением определений трех объектов класса Function: s, s2 и s3.
Function s(one,r_min,r_max,orig,n_points,x_scale,y_scale);
Function s2(slope,r_min,r_max,orig,n_points,x_scale,y_scale);
Function s3(square,r_min,r_max,orig,n_points,x_scale,y_scale);
Каждый объект класса Function определяет, как их первый аргумент (функция с одним аргументом типа double, возвращающая значение типа double) будет нарисован в окне. Второй и третий аргументы задают диапазон изменения переменной x (аргумента изображаемой функции). Четвертый аргумент (в данном случае orig) сообщает объекту класса Function, в каком месте окна расположено начало координат (0,0).
Text (см. раздел 13.11).
Text ts(Point(100,y_orig–40),"one");
Text ts2(Point(100,y_orig+y_orig/2–20),"x/2");
Text ts3(Point(x_orig–100,20),"x*x");
win.set_label("Function graphing: label functions");
win.wait_for_button();
С этого момента на протяжении всей главы мы будем пропускать повторяющийся код, связывающий фигуру с окном, присваивающий ей метку и ожидающий щелчка на кнопке Next.
x/2 касается параболы x*x в точке (0,0), а график функции one пересекает линию x/2 в точке (2,1), но это известно лишь нам; для того чтобы это стало очевидно читателям, на рисунке следует нанести оси координат.
Код для построения осей состоит из объявлений двух объектов класса Axis (раздел 15.4).
const int xlength = xmax–40; // оси должны быть чуть меньше окна
const int ylength = ymax–40;
Axis x(Axis::x,Point(20,y_orig), xlength,
xlength/x_scale, "one notch == 1");
Axis y(Axis::y,Point(x_orig, ylength+20),
ylength, ylength/y_scale, " one notch == 1");