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

  • Вариант №5 OpenGL Группа: АВТ-241 Студент: Базаров Б. Н. Преподаватель: Пешков А. В. НОВОСИБИРСК 2022

  • Пояснительная записка к расчетнографической работе. Вариант 5 Opengl группа авт241 Студент Базаров Б. Н


    Скачать 41.51 Kb.
    НазваниеПояснительная записка к расчетнографической работе. Вариант 5 Opengl группа авт241 Студент Базаров Б. Н
    Дата27.04.2023
    Размер41.51 Kb.
    Формат файлаdocx
    Имя файлаBazarov_rgr_5variant_AVT_241.docx
    ТипПояснительная записка
    #1094302

    МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

    НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

    Пояснительная записка к расчетно-графической работе.

    Вариант №5

    OpenGL

    Группа: АВТ-241

    Студент: Базаров Б. Н.

    Преподаватель: Пешков А. В.

    НОВОСИБИРСК 2022

    Задание:

     «Насекомое и лампочка». Насекомое летит на источник света таким образом, чтобы угол между источником и направлением вектора скорости был постоянным, т.е. по спирали. Ударяясь о поверхность лампочки, переходи в режим свободного падения с сохранением горизонтальной составляющей скорости при ударе (отскок от поверхности). Насекомые появляются со случайными начальными точками и скоростями.

    Основной текст программы:

    #include

    #include

    #include

    #include "glut.h"

    #include

    #define M_PI 3.1415926535

    #define NUM_INSECTS 10 // количество насекомых

    #define MAX_SPEED 0.1 // максимальная скоро
    typedef struct {

    float x, y; // координаты

    float vx, vy; // скорость

    } Insect;
    // создаем массив насекомых

    Insect insects[NUM_INSECTS];

    void init() {

    // инициализируем каждое насекомое случайными координатами и скоростями

    for (int i = 0; i < NUM_INSECTS; i++) {

    insects[i].x = 2.0 * ((float)rand() / RAND_MAX) - 1.0;

    insects[i].y = 2.0 * ((float)rand() / RAND_MAX) - 1.0;

    insects[i].vx = MAX_SPEED * (2.0 * ((float)rand() / RAND_MAX) - 1.0);

    insects[i].vy = MAX_SPEED * (2.0 * ((float)rand() / RAND_MAX) - 1.0);

    }

    }

    void timer(int value) {

    // обновляем координаты насекомых

    for (int i = 0; i < NUM_INSECTS; i++) {

    insects[i].x += insects[i].vx;

    insects[i].y += insects[i].vy;
    // если насекомое ударилось об поверхность, то отражаем его

    if (insects[i].x >= 1.0 || insects[i].x <= -1.0) {

    insects[i].vx = -insects[i].vx;

    }

    if (insects[i].y >= 1.0 || insects[i].y <= -1.0) {

    insects[i].vy = -insects[i].vy;

    }

    }
    // перерисовываем сцену

    glutPostRedisplay();
    // устанавливаем таймер на следующий кадр

    glutTimerFunc(1000 / 60, timer, 0);

    }

    void display() {

    // очищаем экран

    glClear(GL_COLOR_BUFFER_BIT);
    // рисуем насекомых

    glColor3f(1.0, 0.0, 0.0);

    for (int i = 0; i < NUM_INSECTS; i++) {

    glBegin(GL_TRIANGLE_FAN);

    glVertex2f(insects[i].x, insects[i].y);

    for (int j = 0; j <= 360; j++) {

    float degInRad = j * M_PI / 180;

    glVertex2f(insects[i].x + 0.1 * cos(degInRad), insects[i].y + 0.1 * sin(degInRad));

    }

    glEnd();

    }
    // рисуем источник света

    glColor3f(1.0, 1.0, 0.0);

    glBegin(GL_TRIANGLE_FAN);

    glVertex2f(0.0, 0.0);

    for (int j = 0; j <= 360; j++) {

    float degInRad = j * M_PI / 180;

    glVertex2f(0.1 * cos(degInRad), 0.1 * sin(degInRad));

    }

    glEnd();
    // отображаем результат

    glutSwapBuffers();

    }

    int main(int argc, char** argv) {

    // инициализация GLUT

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);

    glutInitWindowSize(400, 400);

    glutCreateWindow("Insect and Lamp");
    // инициализация насекомых

    init();
    // устанавливаем функцию обработки события таймера

    glutTimerFunc(0, timer, 0);
    // устанавливаем функцию отрисовки сцены

    glutDisplayFunc(display);
    // запускаем цикл обработки событий

    glutMainLoop();

    return 0;

    }
    Пример работы программы:


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