Построение графика в текстовом режиме
Графики, выводимые на экран в текстовом режиме, не отличаются высоким качеством из-за невысокой разрешающей способности экрана в этом режиме. Тем не менее во многих случаях их применение вполне оправдано. Задача. Написать программу построения графика заданной функции Y=f(X) для аргумента X, изменяющегося от Xmin до Xmax. Для определенности будем считать, что Y=sin(x), Xmin =–2π, Xmax = 2π. Если известны минимальное и максимальное значение функции, то областью, в которой располагается реальный (натурный) график, является прямоугольник с координатами (при общепринятом направлении осей): левый верхний угол – (Xmin, Ymax); правый нижний угол – (Xmax, Ymin). На экране для размещения графика тоже должна быть выделена прямоугольная область, координатами которой (с учетом выбранного направления оси Y вниз) будут: левый верхний угол – (xGmin, yGmin); правый нижний угол – (xGmax, yGmax), здесь обозначено: xGmin – x графическое минимальное, xGmax – x графическое максимальное, yGmin – y графическое минимальное, yGmax – y графическое максимальное. В общем случае " область реального существования " функции должна быть отражена на " область ее экранного существования ". Для этого должны быть вычислены масштабы – коэффициенты, с помощью которых натурные величины (X, Y) будут переводиться в графические координаты (xG, yG). Масштабы можно определить по следующим формулам: Mx: = (xGmax-xGmin)/(Xmax-Xmin); { Масштаб по X } My: = (yGmax-yGmin)/(Ymax-Ymin); { Масштаб по Y } которые получены из условия, что стороны " экранного " прямоугольника точно будут соответствовать сторонам " реального " прямоугольника. Максимальное и минимальное значения функции (хотя бы приблизительные, лучше с запасом в большую по абсолютной величине сторону) должны быть определены пользователем. Для перехода к графическим координатам получим следующие соотношения: xG: =xGmin+Round((x-Xmin)*mx); yG: =yGmin+Round((Ymax-y)*my); Здесь функция Round (аргумент) используется для получения целого значения с правильным округлением, а " несимметричность" ее аргумента вызвана тем, что на экране ось Y направлена вниз. Используя эти формулы, можно провести оси X и Y на графике: оси X соответствует y=0 во второй формуле, а оси Y – x=0 в первой формуле. Аналогично, можно легко нанести на график сетку линий: для горизонтальных линий задают необходимые значения Y во второй формуле, а для вертикальных – значения X в первой. Приводимая ниже программа не является универсальной, но она демонстрирует приемы, которые могут быть использованы при написании более качественных продуктов. Для проведения горизонтальных и вертикальных линий в программе используются процедуры, для вычисления заданной зависимости используется функция. Все необходимые действия выполняются последовательно и автономно. При необходимости любое количество используемых констант может быть заменено переменными, значения которых будут запрашиваться у пользователя в режиме диалога. В операторах While условие окончания записано так, чтобы гарантированно выводилась последняя линия или точка. Обратите внимание, что если назначены пределы изменения по оси X на экране (xGmin, xGmax), то количество точек на этой оси будет (xGmax–xGmin+1), и количество интервалов (шагов) нет смысла назначать более (xGmax–xGmin). Константы, определяющие размеры графика на экране (xGmin, xGmax, yGmin, yGmax), назначены с учетом возможности сделать необходимые надписи вне поля графика.
|