0 / 0 / 0
Регистрация: 17.10.2022
Сообщений: 1
1

Нарисовать 5угольник вращающийся вокруг своей оси и двигающийся по восмёрке используя Allegro5

17.10.2022, 21:41. Показов 995. Ответов 0

Author24 — интернет-сервис помощи студентам
Эту программу нужно переделать так, чтобы здесь был 5угольник вращающийся вокруг своей оси и двигающийся по восмёрке.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <math.h>
#include <stdio.h>
 
// Doі№cz definicje biblioteki Allegro
#include <allegro5/allegro.h>
#include <allegro5/allegro_primitives.h>
 
const float FPS = 60;       //obraz bкdzie aktualizowany co 1/FPS sekundy
const int SCREEN_W = 640;   //szerokoњж okna
const int SCREEN_H = 480;   //wysokoњж okna
 
// Funkcja gіуwna
int main()
{
    ALLEGRO_DISPLAY *display = NULL;            //okno
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;    //kolejka zdarzen
    ALLEGRO_TIMER *timer = NULL;                //timer, od ktorego bкdziemy odbierac zdarzenia (potrzebny do animacji)
    bool redraw = true;
 
    if (!al_init()) {                           //inicjalizacja biblioteki Allegro
        fprintf(stderr, "Nie zainicjalizowano allegro!\n");
        return -1;
    }
    
    display = al_create_display(SCREEN_W, SCREEN_H);    //utworznie okna
    timer = al_create_timer(1.0 / FPS);                 //utworzenie timera
    al_install_keyboard();                              //inicjalizacja obsіugi klawiatury
    event_queue = al_create_event_queue();              //utworzenie kolejki zdarzeс
    
    al_init_primitives_addon();                         //inicjalizacja obsіugi prostych elementуw (punkty, linie, prostok№ty, elipsy itd.)
 
    //Rejestracja їrуdeі zdarzeс (okno, timer, klawiatura ...)
    al_register_event_source(event_queue, al_get_display_event_source(display));
    al_register_event_source(event_queue, al_get_timer_event_source(timer));
    al_register_event_source(event_queue, al_get_keyboard_event_source());
    
    //Kolory rysowania
    ALLEGRO_COLOR yellow = al_map_rgb(255, 255, 0);
    ALLEGRO_COLOR white = al_map_rgb(255, 255, 255);
    ALLEGRO_COLOR blue = al_map_rgb(0, 0, 255);
    ALLEGRO_COLOR black = al_map_rgb(0, 0, 0);
 
    //Definicja wielok№ta
    const int N = 7;
    float dx[N] = { 0.0, -30.0, -10.0, -10.0, 10.0, 10.0, 30.0 };
    float dy[N] = { -60.0, -30.0,-30.0, 60.0, 60.0,-30.0,-30.0 };
 
    //Tablice na przetworzone wspуіrzкdna punktуw
    float points[2*N];
 
    //Zmienne na potrzeby obracania figury
    double fi=0.0, dfi=0.1, sinfi, cosfi;
 
    //Uruchamiamy timer, ktуry bкdzie z zadan№ czкstotliwoњci№ wysyіaі zdarzenia
    al_start_timer(timer);
    
    //Pкtla gіуwna programu - obsіuga zdarzeс.
    //Dziaіamy, dopуki uїytkownik nie wciњnie Esc.
    while(true)
    {
        ALLEGRO_EVENT event;
        al_wait_for_event(event_queue, &event);
 
        if (event.type == ALLEGRO_EVENT_TIMER) {    //zdarzenie timera -> odњwieїenie obrazu 
            redraw = true;
        }
        else if (event.type == ALLEGRO_EVENT_KEY_DOWN) {    //zdarzenie klawiatury -> jeњli Esc to koсczymy
            if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE)
            break;
        }
        else if (event.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { //zdarzenie zamkniкcia okna
            break;
        }
 
        if (redraw && al_is_event_queue_empty(event_queue)) 
        {
            redraw = false;
            al_clear_to_color(black); //czyszczenie okna na zadany kolor
 
            //Wyznacz њrodek ekranu
            int xm = SCREEN_W / 2;
            int ym = SCREEN_H / 2;
 
            //Obrуt figury
            sinfi = sin(fi);
            cosfi = cos(fi);
            for (int i = 0; i < N; i++)
            {
                points[2 * i] = (dx[i] * cosfi - dy[i] * sinfi + 0.5) + xm;
                points[2 * i + 1] = (dx[i] * sinfi + dy[i] * cosfi + 0.5) + ym;
            }
            fi += dfi;
 
            //Narysuj wypeіniony okr№g
            al_draw_filled_circle(xm, ym, 100, blue);
            al_draw_circle(xm, ym, 100, yellow, 2);
 
            //Narysuj wypeіniony wielokat
            al_draw_filled_polygon(points, N, white);
 
            //Wyњwietl w oknie to, co narysowano w buforze
            al_flip_display();
        }
    }
 
    al_destroy_display(display);
    al_destroy_timer(timer);
    al_destroy_event_queue(event_queue);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2022, 21:41
Ответы с готовыми решениями:

Нарисовать треугольник, вращающийся вокруг своей оси
Помогите ! Нужно нарисовать равносторонний треугольник и сделать так, чтобы он крутился вокруг...

Прямоугольник, вращающийся на плоскости экрана вокруг своей оси
Изобразить на экране прямоугольник, вращающийся в плоскости экрана вокруг своего центра

Изобразить равнобедренный треугольник, вращающийся вокруг своей высоты, расположенной параллельно вертикальной оси экрана
Доброго времени суток, уважаемые пользователи нашего форума! Никак не могу сообразить, сделать...

Как вращать эллипс вокруг своей оси ? (вокруг себя)
напишите код плиз я вот написал для того чтобы эллипс вращался вокруг точки, а вот еще надо...

0
17.10.2022, 21:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2022, 21:41
Помогаю со студенческими работами здесь

поворот изображения вокруг своей оси во время движения по кругу вокруг центра
Cобственно требуется написать программу в Delphi в которой 2 машинки будут ездить по кругу,...

Вращение планеты вокруг солнца, и вокруг своей оси
У меня есть Солнце, которое находиться в координатах(0.0.0), и нужно вращать планеты, как по...

Тетраэдр вращающийся вокруг оси ОУ
Здравствуйте, с графикой в pascal тяжко, надо: Написать программу для изображения многогранника,...

ООП. Треугольник, вращающийся вокруг своей вершины
Получить на экране правильный треугольник который вращается вокруг одной из своих вершин

Постройте прямоугольный треугольник, вращающийся вокруг своей стороны
Постройте на экране компьютера прямоугольный треугольник, вращающийся вокруг своей стороны....

Постройте прямоугольный треугольник, вращающийся вокруг своей стороны
18. Постройте на экране компьютера прямоугольный треугольник, вращающийся вокруг своей стороны.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru