Ниже приведен фрагмент кода, который рисует три указанные выше линии.
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
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
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");