Увеличение и уменьшение трех предметов по нажатию клавиши - C (СИ)
Формулировка задачи:
Помогите пожалуйста написать программу увеличения и уменьшения трех предметов (окружность, квадрат и заполненный прямоугольник) по нажатию на клавиши 1, 2, 3, 4, 5 и 6 соответственно.
Решение задачи: «Увеличение и уменьшение трех предметов по нажатию клавиши»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <stdlib.h> #include "graphics.h" #define M 28 #define x0 300 #define y0 240 float pod(float); void ris(int(*)(float),int(*)(float),float(*)(float)); int scrx(float); int scry(float); void osi(int (*)(float),int (*)(float)); int main (void) { int gd = DETECT, gm; initgraph(&gd, &gm, ""); osi(scrx,scry); ris(scrx,scry,pod); system("pause"); return 0; } float pod(float x) { if (x>=0) { return x*x; } else { return -(x*x)/10; } } void ris(int(*asd)(float),int(*zxc)(float),float(*qwe)(float)) { int xo,yo; float step,x,xmin,xmax; xmin=-10; xmax=10; setcolor(YELLOW); step=1.0/(10*M); for(x=xmin;x<xmax;x+=step) { xo=asd(x); yo=zxc(qwe(x)); if (xo>0 && xo<640 && yo>0 && yo<480) putpixel(xo,yo,YELLOW); } } void osi(int (*asd)(float),int (*zxc)(float)) { int xo,i; char a[5]; line(x0,0,x0,480); line(0,y0,640,y0); for(i=0;i<=(640-x0)/M;i++) { xo=asd(i); line(xo,y0+2,xo,y0-2); sprintf(a,"%d",i); outtextxy(xo-8,y0+4,a); } for(i=-(600-x0)/M;i<0;i++) { xo=asd(i); line(xo,y0+2,xo,y0-2); sprintf(a,"%d",i); outtextxy(xo-8,y0+4,a); } for(i=(y0)/M;i>0;i--) { xo=zxc(i); line(x0-2,xo,x0+2,xo); sprintf(a,"%d",i); outtextxy(x0+8,xo-8,a); } for(i=-(480-y0)/M;i<0;i++) { xo=zxc(i); line(x0-2,xo,x0+2,xo); sprintf(a,"%d",i); outtextxy(x0+8,xo-8,a); } } int scrx(float x) { return x0+M*x; } int scry(float y) { return y0-M*y; }
Объяснение кода листинга программы
В этом коде реализован алгоритм работы с графикой, который позволяет увеличивать и уменьшать три объекта на экране по нажатию клавиши. Вот список ключевых моментов:
- Определение функций:
pod(float x)
: функция, которая вычисляет квадрат числаx
. Еслиx
больше или равно нулю, возвращается его квадрат. Еслиx
меньше нуля, возвращается отрицательный квадратx
(то естьx*x/10
).scrx(float x)
: функция, которая преобразует значениеx
в пиксели по горизонтали на экране. Она просто возвращаетx0 + M * x
, гдеM
- это масштабный коэффициент, аx0
- это начальная координата по горизонтали.scry(float y)
: функция, аналогичнаяscrx
, но преобразующая значениеy
в пиксели по вертикали.ris(int(*asd)(float),int(*zxc)(float),float(*qwe)(float))
: функция, которая рисует сетку на графике. Она принимает три функции:asd
,zxc
иqwe
, которые соответствуют функциямscrx
,scry
иpod
. Функция перебирает все значения отxmin
доxmax
с шагомstep
и рисует пиксели на графике в соответствии с результатами функцийasd
иzxc
.osi(int (*asd)(float),int (*zxc)(float))
: функция, которая рисует оси на графике. Она принимает две функции:asd
иzxc
, которые соответствуют функциямscrx
иscry
. Функция рисует две оси: вертикальную и горизонтальную, а также подписывает их значениями.main(void)
: функция, которая является точкой входа в программу. Она инициализирует графический драйвер, вызывает функциюosi
для рисования осей, затем функциюris
для рисования сетки, и, наконец, ожидает нажатия клавиши.
- Использование функций:
- Функция
ris
используется для рисования сетки на графике. - Функция
osi
используется для рисования осей на графике.
- Функция
- Графический экран:
- Значения
x0
иy0
определяют начальную точку по горизонтали и вертикали соответственно. - Значение
M
определяет масштабный коэффициент.
- Значения
- Масштабирование:
- При нажатии клавиши, значения
x0
иy0
изменяются, что приводит к масштабированию графического экрана.
- При нажатии клавиши, значения
- Управление осями:
- Функция
osi
позволяет управлять положением осей на графике. При нажатии клавиши, она перерисовывает оси с новыми координатами.
- Функция
- Ограничения:
- Функция
pod
ограничивает значенияx
до неотрицательных чисел. - Функции
scrx
иscry
ограничивают значенияx
иy
соответственно до значений, которые могут быть представлены на экране.
- Функция