Использование значения xlength/x_scale
(0,0)
в качестве начала координат является общепринятым. Если хотите, чтобы начало координат было не в центре, а, как обычно, в левом нижнем углу окна (раздел 15.6), вы легко сможете сделать это. Кроме того, для того чтобы различать оси, можно использовать цвет.x.set_color(Color::red);
y.set_color(Color::red);
Итак, получаем результат, показанный ниже.
15.3. Класс Function
Определение класса графического интерфейса Function
struct Function:Shape {
// параметры функции не хранятся
Function(Fct f,double r1,double r2,Point orig,
int count = 100,double xscale = 25,double yscale = 25);
};
Класс Function
Shape
. Конструктор класса Function
генерирует множество отрезков линий и хранит их в членах класса Shape
. Эти отрезки линий аппроксимируют значения функции f
. Значения функции f
вычисляются count раз в точках, равномерно распределенных по интервалу [r1:r2]
.Function::Function(Fct f,double r1,double r2,Point xy,
int count,double xscale,double yscale)
// строит график функции f(x) для x из диапазона [r1:r2),
// используя count отрезков линий;
// начало координат (0,0) располагается в точке xy
// координаты x масштабируются множителем xscale
// координаты y масштабируются множителем yscale
{
if (r2–r1<=0) error("Неправильный диапазон");
if (count <=0) error("Отрицательное значение count");
double dist = (r2–r1)/count;
double r = r1;
for (int i = 0; i
add(Point(xy.x+int(r*xscale),xy.y–int(f(r)*yscale)));
r += dist;
}
}
Параметры xscale
yscale
используются для масштабирования координат Обратите внимание на то, что объект класса Function
Shape
) и выводит график на экран. Если бы мы хотели повысить гибкость объекта класса Function после его создания, то должны были бы хранить в нем требуемые значения (см. упр. 2). 15.3.1. Аргументы по умолчанию
Обратите внимание на способ инициализации аргументов xscale
yscale
конструктора класса Function. Такой способ инициализации называют 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); // нет
// yscale
Function s3(square,r_min,r_max,orig,n_points); // нет xscale,
// нет yscale
Function s4(sqrt,r_min,r_max,orig); // нет count, нет xscale,
// нет yscale
Этот фрагмент кода эквивалентен следующему:
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, 25);
Function s3(square,r_min,r_max,orig,n_points,25,25);