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




Оболочка для рисования графиков функции одной переменной.

Пояснительная записка к курсовому проекту

По дисциплине «Программирование на языках высокого уровня»

 

Студент:  
Группа:  
Преподаватель: Трофимов С.П.

 

 

Екатеринбург

 


содержание

Введение.. 3

1.Постановка задачи.. 4

2. Теоретическая часть.. 4

2.1. Графическая и математическая системы координат. 5

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

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

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

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

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

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

4.3. Функции.. 8

5. Тестирование.. 12

Библиографический список. 13

Приложение: листинг.. 15


Введение

Задача построения графика определенной функции играет немалую роль в наше время. Такое представление зависимости функции от аргумента в наше время используется в самых разнообразных отраслях науки, техники и экономики. Графики используют, чтобы наглядно показывать эти зависимости, искать закономерности или наоборот находить отклонения.

В действительности существует довольно много хороших программ, строящих графики. Примерами таких программ являются: Microsoft Excel, MathCAD, MATLAB. Эти приложения являются мощными математическими программами, поддерживающими не только построение графиков, но и другие математические функции, что обеспечивает удобную и продуктивную работу с данными.


Постановка задачи

Необходимо создать приложение, которое получает некоторую функцию одной переменной, написанную на языке Си или заданную в объектной форме с прототипом float f(float x). Рисуется график этой функции вначале на некотором отрезке. Затем с клавиатуры график можно перемещать влево – вправо, вверх – вниз, изменять масштабирование по осям x и y. В случае выхода переменной х из диапазона функции f(x) график не рисуется. Предусмотреть возможность рисования нескольких графиков в одной системе координат с выбором цветов и маркеров линий.


Теоретическая часть

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

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

       
 
   
 


а б

 

 

 

Рис. 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.


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

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

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

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

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

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

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

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

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

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

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

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 – константа, которая используется для вычислений

Функции

1. int Vvod(float *a, float *b);

Функция просит пользователя ввести значения границ отрезка [a,b] и изменяет значения по указателям, а также определяет количество графиков.

Функция получает:

1. float *a – указатель на переменную типа float;

2. float *b – указатель на переменную типа float.

Функция изменяет:

Границы отрезка [a,b].

Функция возвращает:

1. 1 – в случае, когда пользователь задает 2 графика;

2. 0 – в случае, когда пользователь задает 1 график.

 


2. void Marker(int V, int *fg, int *sg, int *c1,int *c2);

Функция просит пользователя выбрать маркеры и цвета и изменяет значения по указателям.

Функция получает:

1. int V – значение определяющее количество графиков;

2. int *fg – указатель на переменную типа float;

3. int *sg– указатель на переменную типа float;

4. int *c1– указатель на переменную типа int;

5. int *c2– указатель на переменную типа int.

Функция изменяет:

Тип маркера и его цвет для каждого из графиков.

Функция возвращает:

1. ничего.

 

3. void Points(float fun,float a,float b,float x,float shift,float k,int c, float A,float B);

Функция осуществляет построение графика точками.

Функция получает:

1. float fun – значение функции в точке;

2. float b - конец отрезка;

3. float x – значение переменной;

4. float shift – сдвиг по оси Оу;

5. float k – коэффициент масштабирования по оси Оу;

6. float A – не меняющееся начало отрезка;

7. float B – не меняющийся конец отрезка;

8. int с - цвет.

Функция возвращает:

1. ничего.

 

3. float otobr(float a,float b,float x)

Функция осуществляет отображение значения x на графическую систему координат.

Функция получает:

1. float a - границу a отрезка [a,b];

2. float b – границу b отрезка [a,b];

3. float x – значение х.

Функция возвращает:

1. Координату переменной х в графической системе координат;

 


5. void Strokes(float fun,float a,float b,float x,float shift,float k,int c, float A,float B)

Функция осуществляет построение графика плюсами.

Функция получает:

1. float fun – значение функции в точке;

2. float b - конец отрезка;

3. float x – значение переменной;

4. float shift – сдвиг по оси Оу;

5. float k – коэффициент масштабирования по оси Оу;

6. float A – не меняющееся начало отрезка;

7. float B – не меняющийся конец отрезка;

8. int с - цвет.

Функция возвращает:

1. ничего.

 

6. void Stars(float fun,float a,float b,float x,float shift,float k,int c,float A, float B)

Функция осуществляет построение графика звездами.

Функция получает:

1. float fun – значение функции в точке;

2. float b - конец отрезка;

3. float x – значение переменной;

4. float shift – сдвиг по оси Оу;

5. float k – коэффициент масштабирования по оси Оу;

6. float A – не меняющееся начало отрезка;

7. float B – не меняющийся конец отрезка;

8. int c – цвет.

Функция возвращает:

1. ничего.

 

7. void Squares(float fun,float a,float b,float x,float shift,float k,int c,float A,float B)

Функция осуществляет построение графика квадратами.

Функция получает:

1. float fun – значение функции в точке;

2. float b - конец отрезка;

3. float x – значение переменной;

4. float shift – сдвиг по оси Оу;

5. float k – коэффициент масштабирования по оси Оу;

6. float A – не меняющееся начало отрезка;

7. float B – не меняющийся конец отрезка;

8. int c – цвет.

Функция возвращает:

1. ничего.

 

8. float Kswitcher(int j);

Функция считает коэффициент сжатия/растяжения по оси Оу.

Функция получает:

1. int j – количество нажатий кнопок «w» и «s».

Функция возвращает:

1. Значение коэффициента сжатия/растяжения.

 

9. void Mashtab(float *a,float *b,int *i,float *shift,float *A,float *B,int *j)

Функция осуществляет масштабирование и сдвиг графика, а также выход из графического режима.

Функция получает:

1. float *a – указатель на переменную типа float;

2. float *b – указатель на переменную типа float;

3. float *shift – указатель на переменную типа float;

4. float *A – указатель на переменную типа float;

5. float *B – указатель на переменную типа float;

6. int *i – указатель на переменную типа int;

7. int *j – указатель на переменную типа int;

Функция изменяет:

Границы отрезка [a,b], сдвиг, переменную i, указывающую на выход из цикла, и переменную j, показывающую, как изменяется коэффициент сжатия/растяжения по оси Оу.

Функция возвращает:

1. ничего.

 

10. void IniGraph()

Функция осуществляет инициализацию графического режима.

Функция получает:

1. ничего.

Функция возвращает:

1. ничего.

 

11. float fun1(float x)

Функция считает значение функции в точке.

Функция получает:

1. float x – аргумент функции.

Функция возвращает:

Значение функции в точке.

 

12. float fun2(float x)

Функция считает значение функции в точке.

Функция получает:

1. float x – аргумент функции.

Функция возвращает:

Значение функции в точке.

 

13. void SisCoord(float a,float b,float shift,float A,float B,float k)

Функция осуществляет построение систем координат а также, расставляет значения по осям.

Функция получает:

1. float a – начало отрезка;

2. float b – конец отрезка;

3. float shift – сдвиг по оси Оу;

4. float A – не меняющееся начало отрезка;

5. float B – не меняющийся конец отрезка;

6. float k –коэффициент растяжения/сжатия по оси Оу.

Функция возвращает:

1. ничего.


Тестирование

1. Задаем входные параметры для программы:

 

Программа автоматически меняет значения местами, если их задали неправильно и строит графики. К сожалению клавиша Print Screen не сработает правильно в графическом режиме.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-14 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: