Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9

Траектория движения точки(анимация) C++

21.03.2017, 22:11. Показов 5237. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
В общем нужно реализовать анимацию движения точки по окружности:
1) за первый проход круга по окружности, в местах, где он был, остаются следы - то есть кружки.
2) за второй проход по окружности, следы стираются.
3) 1-2 пункты
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
struct Point
{
    float X;
    float Y;
    float R;
};
 
int Angle = 0;
int Counter = 0;
GLUquadricObj *quadratic;    // Место для хранения объекта Quadratic
Point mass[10];
 
// Функции для работы с OpenGL/GLUT
void GLRenderScene();
void TimeDraw(int value);
void Draw();
 
int _tmain(int argc, _TCHAR* argv[])
{
    quadratic=gluNewQuadric();     // Создаем указатель на квадратичный объект ( НОВОЕ )
    
    // Аргументы командной строки (путь к EXE)
    char *argv0 = new char[512];
    GetModuleFileNameA(0, argv0, 512);
 
    // Число аргументов (один только путь к EXE, поэтому, argc = 1)
    int argc1 = 1;
 
    // Инициализация GLUT, для данного EXE
    glutInit(&argc1, &argv0);
 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    
    // Координаты и размер окна GLUT
    glutInitWindowPosition(300, 50);
    glutInitWindowSize(600, 600);
    
    // Создание окна GLUT
    glutCreateWindow("Test Task");
 
    // рассчитываем координаты
    float X1, Y1, theta;
    for(int i = 0; i < 5; i++)
    {
        theta = (2 * 3.1415926f) * (float(i) / 5.0);
        // начальные координаты i-й
        X1 = 1.0 * cosf(theta);
        Y1 = 1.0 * sinf(theta);
        mass[i].X = X1;
        mass[i].Y = Y1;
        mass[i + 5].X = X1;
        mass[i + 5].Y = Y1;
    }
 
    // Обработчик рендеринга (вызывается при отрисовке окна, аналогично WM_PAINT)
    glutDisplayFunc(GLRenderScene);
 
    glMatrixMode(GL_PROJECTION); //задаем матрицу для 2-д рисования
    glLoadIdentity(); //отчищает матрицу
 
    glutTimerFunc(17, TimeDraw, 0);
 
    // Инициализация OpenGL
    // Цвет фона - черный
    glClearColor(0.0, 0.0, 0.0, 1.0);
 
    glMatrixMode(GL_MODELVIEW);
    // Главный цикл приложения
    glutMainLoop();
 
    return 0;
}
 
 
void GLRenderScene()
{
    // Очищаем буфер цвета и глубины
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
 
    // Цвет круга - темно-зеленый:
    glColor3f(0.0, 0.3, 0.0);
 
    // число сегментов окружности
    int segCount = 40;
 
    float theta;
    float X, Y;
 
    // рисование окружности
    glBegin(GL_LINE_LOOP);
    for(int j = 0; j < segCount; j++)
    {
        theta = (2.0 * 3.1415926f) * (float(j) / float(segCount));
        X = 1.0 * cosf(theta);
        Y = 1.0 * sinf(theta);
        glVertex2f(X, Y);
    }
    glEnd();
 
    glColor3f(0.5, 1.0, 0.5);
 
    Draw();
 
    glutSwapBuffers();
}
 
void Draw()
{
    glVertex2f(mass[Counter].X, mass[Counter].Y);
    glBegin(GL_POLYGON);
    for(int j = 0; j < 20; j++)
    {
        float theta = (2 * 3.1415926f) * (float(j) / 20.0);
        float X = 0.01 * cosf(theta);
        float Y = 0.01 * sinf(theta);
        glVertex2f(mass[Counter].X + X, mass[Counter].Y + Y);
    }
    glEnd();
}
 
void TimeDraw(int value)
{
    if(Angle > 360)
    {
        Angle = 0;
    }
    if(Counter == 5)
    {
        Counter = 0;
    }
    if(Angle % 72 == 0 && Angle != 0)
        Counter++;
    Angle += 1;
    glutPostRedisplay();  // перерисовываем экран
    glutTimerFunc(17, TimeDraw, 0);
}
Круг бегает по окружности, но следы от него не остаются.
Пробовал поработать с glPushMatrix и glPopMatrix, но не получилось реализовать.
Прошу помощи(любой) : пример, ссылку, что угодно, только бы разобраться.
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2017, 22:11
Ответы с готовыми решениями:

Траектория движения
Стоит задача нарисовать траекторию движения объекта в 3D, что-то в духе трубопровода в старой заставке к Windows. Рисовать надо...

Анимация: график движения заряженной частицы в магнитном поле
Программа, строящая график движения заряженной частицы в магнитном поле Подскажите как вообще делать.. начала изучать анимацию..

Траектория движения точки
Нарисовать траекторию движения точки,расположенной на ободе колеса,движущегося равномерно с линейной скоростью V

5
 Аватар для qppq
145 / 89 / 23
Регистрация: 31.08.2016
Сообщений: 780
Записей в блоге: 2
22.03.2017, 08:05
перый проход: в каждой точке окружности рисуется свой кружок
второй проход: в каждой точке окружности рисуется свой кружок цвета фона
1
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
22.03.2017, 12:55
Цитата Сообщение от Gdasar Посмотреть сообщение
//рассчитываем координаты
* * float X1, Y1, theta;
* * for(int i = 0; i < 5; i++)
* * {
* * * * theta = (2 * 3.1415926f) * (float(i) / 5.0);
* * * * // начальные координаты i-й
* * * * X1 = 1.0 * cosf(theta);
* * * * Y1 = 1.0 * sinf(theta);
* * * * mass[i].X = X1;
* * * * mass[i].Y = Y1;
* * * * mass[i + 5].X = X1;
* * * * mass[i + 5].Y = Y1;
* * }
- cosf, sinf - интересные функции, у Вас такие функции применяются? Это какая у Вас среда?
А вообще, расчет синуса и косинуса для точки - центра окружности - это же ведь нужно делать в функции Draw(). Может быть в этом ошибка?
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
22.03.2017, 16:55  [ТС]
Всё, мужики! Я разобрался : поменял алгоритм.
Цитата Сообщение от DemolitionMan Посмотреть сообщение
- cosf, sinf - интересные функции, у Вас такие функции применяются?
ссылка
Цитата Сообщение от DemolitionMan Посмотреть сообщение
Это какая у Вас среда?
MVS.
Цитата Сообщение от DemolitionMan Посмотреть сообщение
А вообще, расчет синуса и косинуса для точки - центра окружности - это же ведь нужно делать в функции Draw()
Тогда координаты будут постоянно высчитываться заново, а мне достаточно одного раза.
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
22.03.2017, 18:27
Цитата Сообщение от Gdasar Посмотреть сообщение
MVS.
- какая версия Microsoft Visual Studio, если не секрет?
Цитата Сообщение от Gdasar Посмотреть сообщение
Тогда координаты будут постоянно высчитываться заново, а мне достаточно одного раза.
- Ха-ха-ха!!!!! Я подумал, что это уже есть в функции GLRenderScene(), вот в этом месте:
Цитата Сообщение от Gdasar Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
    //Рисование окружности
* * glBegin(GL_LINE_LOOP);
* * for(int j = 0; j < segCount; j++)
* * {
* * * * theta = (2.0 * 3.1415926f) * (float(j) / float(segCount));
* * * * X = 1.0 * cosf(theta);
* * * * Y = 1.0 * sinf(theta);
* * * * glVertex2f(X, Y);
* * }
* * glEnd();
Как вообще OpenGL идет? Нормально? У меня, например, OpenGL вообще не пошел, идут только стандартные проекты, которые шли вместе с C++Builder 6. И еще я хотел сказать, что идут только эти проекты, но с какими-то небольшими изменениями(и то не совсеми). Но если я делаю какой-то проект сам или делаю какие-то большие изменения в этих проектах, о которых я говорил выше, то вообще ничего не работает.
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
22.03.2017, 18:40  [ТС]
Цитата Сообщение от DemolitionMan Посмотреть сообщение
- какая версия Microsoft Visual Studio, если не секрет?
2008, валялась на компе - поставил.
Вроде как работает норм. Анимацию получилось сделать - уже хорошо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.03.2017, 18:40
Помогаю со студенческими работами здесь

Траектория движения материальной точки
Как решить сию задачу?

Траектория движения точки в полярных координатах
1) Уравнения движения точки в полярных координатах выглядят так: r(t)=sin(3t), Фи(t)=t, t&gt;0 Построить траекторию движения точки ...

Траектория движения точки на колесе едущего автомобиля
Добрый вечер, необходимо нарисовать с использованием модуля GraphABC траекторию движения точки на колесе движущегося автомобиля.

Анимация движения точки
Здравствуйте. У меня такая ситуация: надо написать программу в matlab, которая бы проигрывала анимацию движения точки по прямоугольнику со...

Анимация движения точки по орбите
Здравствуйте. Я написала программу, где изобразила эллипсоид в виде Земли и орбиту космического аппарата в пространстве, используя...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru