отчет. Расчетно графическое задание Компьютерная графика
Скачать 58.07 Kb.
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ ОДЕССКИЙ НАЦИОНАЛЬНЫЙ МОРСКОЙ УНИВЕРСИТЕТ Кафедра «Техническая кибернетика им. Р.В. Меркта» Расчетно – графическое задание Компьютерная графика Выполнила: Студентка 3к 2 гр Брушневская Р. Ю. Проверил: Стародуб В. И. Одесса – 2018 Задание
y=sinh(x) //(sh(x) y=x+/5! На интервале [-2..2]. Графики вывести в окно размером 450х300 пикселей во втором квадрате экрана
Листинг программы №1 #include #include #include #include #include #include #include float a = -1; float b = -1; #define PATHOFDRIVER "C:\\borland\\bji\\" void drawAxes(int ox, int oy, int fieldX, int fieldY, float scaleX, float scaleY) { int x1 = (ox-fieldX/2)*scaleX; int y1 = oy*scaleY; int x2 = (ox+fieldX/2)*scaleX; int y2 = oy*scaleY; line(x1, y1, x2, y2); //осьX x1 = ox*scaleX; y1 = (oy-fieldY/2)*scaleY; x2 = ox*scaleX; y2 = (oy+fieldY/2)*scaleY; line(x1, y1, x2, y2); //осьY } long double fact(int N) { if(N < 0) // если пользователь ввел отрицательное число return 0; // возвращаем ноль if (N == 0) // если пользователь ввел ноль, return 1; // возвращаем факториал от нуля - это 1 else // Во всех остальных случаях return N * fact(N - 1); // делаем рекурсию. } void draw(int ox, int oy, int fieldX, int fieldY, float scaleX, float scaleY) { int centerX = (ox)*scaleX; int centerY = (oy)*scaleY;; float minArg; minArg = -5; float maxArg = 5; float step = 0.01; float x1, y1; float x2, y2; float f=minArg; while(f { x1 = f; //координата X y1 = x1 + sinh(x1);//координата Y putpixel(x1*scaleX+centerX, y1*scaleY+centerY, WHITE); x2 = f; //координата X y2 = x2 + pow(x2,3)/fact(3) + pow(x2,5)/fact(5);//координата Y putpixel(x2*scaleX+centerX, y2*scaleY+centerY, WHITE); f+=step; } } void main(){ int gdriver = DETECT; int gmode; int errorcode; initgraph(&gdriver, &gmode, ""); errorcode = graphresult(); if(errorcode != grOk){ printf("Error : %d\n", errorcode); puts("___ENTER___"); getch(); return; } //дальше производится установка параметров для вывода графика в //первой четверти экрана int fieldX = 450; //ширина поля для вывода графика int fieldY = 300; //высота поля для вывода графика float scaleX = getmaxx() / 2.0 / fieldX; //необходимый масштаб по оси X //для вывода графиков float scaleY = getmaxy() / 2.0 / fieldY; //необходимый масштаб по оси Y //вывод графика во 2 квадрате экрана int ox = fieldX+fieldX/2; //координаты начала по оси X int oy = fieldY/2; //координаты начала по оси Y drawAxes(ox, oy, fieldX, fieldY, scaleX, scaleY); draw(ox, oy, fieldX, fieldY, scaleX, scaleY); getch(); closegraph(); } Скриншот Рис. 1 – Скриншот выполнения первого задания Листинг программы №2 #include #include #include #include #include #include #include int kol = 6; int masX[] = {3,0,-3,-3,0,3}; int masY[] = {-1,2,2,-2,-2,-2}; int masRX[6];//действительные координаты int masRY[6]; #define PATHOFDRIVER "C:\\borland\\bji\\" void calcRealSize(int ox, int oy, float scaleX, float scaleY, float scale) { masRX[0]=scaleX+scaleY+scale; masRX[0]=ox; masRY[0]=oy; for(int i = 1; i { masRX[i]=masRX[i-1] + masX[i]*scaleX*scale; masRY[i]=masRY[i-1] + masY[i]*scaleY*scale; } } void draw(int ox, int oy, int dx, int dy, float angle)//отображение со смещением, и поворотом { angle = angle*M_PI/180; for(int i = 0; i { //смещение masRX[i]=masRX[i] + dx; masRY[i]=masRY[i] + dy; float dx1=masRX[i]-ox; float dy1=masRY[i]-oy; masRX[i]=ox+dx1*cos(angle)-dy1*sin(angle); masRY[i]=oy+dx1*sin(angle)+dy1*cos(angle); } line(masRX[kol-1],masRY[kol-1],masRX[0],masRY[0]); for(int j = 1; j < kol; j++) { line(masRX[j-1],masRY[j-1],masRX[j],masRY[j]); } } void main(){ int gdriver = DETECT; int gmode; int errorcode; initgraph(&gdriver, &gmode, ""); errorcode = graphresult(); if(errorcode != grOk){ printf("Error : %d\n", errorcode); puts("___ENTER___"); getch(); return; } int fieldX = 42; //ширина поля для вывода рисунка int fieldY = 30; //высота поля для вывода рисунка float scaleX = getmaxx() / fieldX; //необходимый масштаб по оси X //для вывода графиков float scaleY = getmaxy() / fieldY; //необходимый масштаб по оси Y float scale = 1.2; // относительный масштаб int ox = 0; //мировые координаты по оси X int oy = getmaxy(); //мировые координаты по оси Y ox = fieldX*scaleX/2.0; //координаты центра экрана по оси X oy = fieldY*scaleY/2.0; //координаты центра экрана по оси Y calcRealSize(ox, oy, scaleX, scaleY, scale);//подсчитывает координаты // в зависимости от масштаба и оси координат float angle = 45; int dx = 3.2*scaleX;//смещение int dy = 0; draw(ox, oy, dx, dy, angle);//отображение со смещением, и поворотом getch(); closegraph(); } Скриншот Рис. 2 – Скриншот выполнения второго задания |