Главная страница
Навигация по странице:

  • ОДЕССКИЙ НАЦИОНАЛЬНЫЙ МОРСКОЙ УНИВЕРСИТЕТ Кафедра «Техническая кибернетика им. Р.В. Меркта»Расчетно – графическое задание

  • Листинг программы №1

  • Листинг программы №2

  • отчет. Расчетно графическое задание Компьютерная графика


    Скачать 58.07 Kb.
    НазваниеРасчетно графическое задание Компьютерная графика
    Дата10.10.2018
    Размер58.07 Kb.
    Формат файлаdocx
    Имя файлаотчет.docx
    ТипДокументы
    #53011

    МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

    ОДЕССКИЙ НАЦИОНАЛЬНЫЙ МОРСКОЙ УНИВЕРСИТЕТ

    Кафедра «Техническая кибернетика им. Р.В. Меркта»

    Расчетно – графическое задание

    Компьютерная графика

    Выполнила:

    Студентка 3к 2 гр

    Брушневская Р. Ю.

    Проверил:

    Стародуб В. И.

    Одесса – 2018

    Задание

    1. Написать и отладить программу для построения графиков функций:

    y=sinh(x) //(sh(x)

    y=x+/5!

    На интервале [-2..2].

    Графики вывести в окно размером 450х300 пикселей во втором квадрате экрана

    1

    2

    3

    4



    1. Данную фигуру:

    • переместить из точки О (начало мировых координат) в точку О* (посреди экрана монитора)

    • переместить из точки О* на расстояния: а=3.2 по оси Х (изменив масштаб фигуры на величину k=1.2);

    • повернуть фигуру на угол α=4.5


    Листинг программы №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 – Скриншот выполнения второго задания


    написать администратору сайта