Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка.doc
Скачиваний:
2
Добавлен:
12.11.2018
Размер:
206.85 Кб
Скачать

2. Теоретическая часть Графическая и математическая системы координат.

Для рисования графика функции программисту удобнее использовать математическую систему координат (МСК), расположенную по центру экрана. Графические функции работают в графической системе координат (ГСК).

а б

Рис. 1. Системы координат: а – математическая; б – графическая

Инициализируем переменные.

int maxx = getmaxx(),

maxy = getmaxy(),

px = 30, // количество пикселей в одной математической единице по оси Ох

py = px * ((float)maxx/maxy); // количество пикселей в одной математической единице по оси Оy.

Соответствие между двумя системами координат представлено ниже

Соответствие между МСК и ГСК

МСК

ГСК

(0, 0) ……………………………….

(maxx / 2, maxy / 2)

(1, 0) ……………………………….

(maxx / 2 + px, maxy / 2)

(0, 1) ……………………………….

(maxx / 2, maxy / 2 – py)

(x, y) ….…………………………….

(maxx / 2 + x px, maxy / 2 – y py)

(x, f(x)) …………………………….

(maxx / 2 + x px, maxy / 2 – f(x) py)

Реализуем масштабирование по оси координат Ох так, чтобы график функции y = f(x) на заданном отрезке [a, b] размещался по всей ширине экрана. Для этого найдем коэффициенты u и v линейного отображения g(x) = u x + v, при котором отрезок [a, b] переходит в отрезок [0, maxx]. Из системы линейных уравнений

u a + v = 0

u b + v = maxx

находим u = maxx / (b-a), v = -a maxx / (b-a). Тогда точке (x, f(x)) будет соответствовать пиксель

( (maxx / (b-a)) * x - a * maxx / (b-a) , maxy / 2 - f(x) * py)),

где py = maxx/(b-a). Затем график можно нарисовать с помощью цикла, в котором счетчик является вещественной математической переменной. Например:

for(float x = a; x <= b; x += (b-a) / maxx)

putpixel((maxx / (b-a)) * x - a * maxx / (b-a), maxy / 2- f(x) * py));

Данный цикл при больших a и b может оказаться бесконечным. Это возможно в случае, если шаг цикла (b-a) / maxx будет меньше расстояния между числом a и его ближайшим соседом справа для типа float.

3. Инструкция пользователя

3.1. Программные файлы

KK.exe - исполняемый файл, предназначенный для запуска приложения.

3.2.Работа программы

Программа просит пользователя ввести координаты отрезка [a,b], на котором будет построен график функции f(x)=cos(x). Также пользователь задает цвет графика и маркеры, которыми он будет построен. Исходя из данных, программа рисует систему координат и расставляет значения по осям. Дальше с помощью цикла перебираются значения переменной х на отрезке [a,b] и для них считается соответствующее значение функции(й). По полученным координатам на экране в соответствующих точках ставятся маркеры либо точки, образуя график. После этого программа ждет от пользователя дальнейших указаний.

Для работы с графиком функции можно использовать стрелки на клавиатуре, а также клавиши “w”,”a” ,”s”,”d”. Стрелками можно двигать график во все стороны. Клавиши “a” и “d”, отвечают за растяжение и сжатие графика функции по оси Ох. Клавиши “w” и “s” отвечают за растяжение и сжатие графика функции по оси Оу. Для завершения работы с графиком необходимо нажать на клавишу “Esc”.

4. Инструкция программиста

4.1. Глобальные переменные

int ODZflag – глобальная переменная, хранящая ОДЗ (1 – выход из ОДЗ, 0 – значение функции не выходит за пределы ОДЗ).

int o – глобальная переменная, хранящая количество сжатий/растяжений по оси Ох.

int counter – глобальная переменная, хранящая количество сжатий/растяжений по оси Оу.

4.2. Макроподстановки

SDVIG 50 – количество пикселей, на которое мы сдвигаем значения на оси Оу, чтобы они не накладывались на ось

DEL 10 – количество делений, на которое делится ось Ох

TWO 2 – константа, которая используется для вычислений

ESC 27 - ASCII-код символа esc (Escape, ключ)

Down 80 – скан-код клавиши ↓

Left 75 – скан-код клавиши ←

Up 72 – скан-код клавиши ↑

Right 77 – скан-код клавиши →

keyw 119 – ASCII-код символа «w»

keys 115 – ASCII-код символа «s»

keya 97 – ASCII-код символа «a»

keyd 100 – ASCII-код символа «d»

minus 45 – ASCII-код символа «-»

ENTER 13 – ASCII-код символа CR (Carriage Return, возврат каретки)

TURN 48 – константа, которая используется для вычислений