Форум программистов, компьютерный форум CyberForum.ru

Поправьте код. - C++

Восстановить пароль Регистрация
 
CruserD
0 / 0 / 0
Регистрация: 17.02.2011
Сообщений: 18
22.05.2011, 22:49     Поправьте код. #1
Добрый вечер) не будите ли так любезны помочь с прогой ) нужно чтоб на экране были 10 планет ( нашей солнечной системы) у мну вылазиют только 4 из них и должны они крутиться по эллипсу ( ну или хотя бы по окружности тупо вокруг солнца ) Подправьте до рабочего состояния если не сложно буду очень благодарен.

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
// Моделирование сил притяжения
#include <cmath>
#include <GL/glut.h>
#pragma comment (lib, "OpenGL32.lib")
#pragma comment (lib, "Glu32.lib")
#pragma comment (lib, "Glaux.lib")
struct Particle
{ 
        float x;
        float y;
        float vx;
        float vy;
        float m;
};
 
const int N = 10;
 
Particle particles[N];
 
void display()
{
        glClear(GL_COLOR_BUFFER_BIT);
        glBegin(GL_POINTS);
        for (int i = 0; i < N; ++i)
                glVertex2f(particles[i].x, particles[i].y);
        glEnd();
 
        glutSwapBuffers();
}
void timer(int=0)
{
        for (int i = 0; i < N; ++i)//;
        {
                Particle &p0 = particles[i];
                for (int j = 0; j < N; ++j)//;
                {
                        if (j == i)
                                continue;
                        const Particle &p = particles[j];
                        float d = sqrt((p0.x - p.x) * (p0.x - p.x) + 
                                (p0.y - p.y) * (p0.y - p.y));
                        if (d > 2000)
                        {
                              p0.vx +=  0,1* p.m / d / d * (p.x - p0.x) / d;
                              p0.vy +=  0,1* p.m / d / d * (p.y - p0.y) / d; 
                        }
                }
                p0.x += p0.vx;
                p0.y += p0.vy;
        }
        display();
        glutTimerFunc(1, timer, 1);
}
int main(int argc, char **argv)
{
        particles[0].x = 100;
        particles[0].y = 100;
        particles[0].vx = 0;
        particles[0].vy = 0;
        particles[0].m = 100;
 
        particles[1].x = 105;
        particles[1].y = 100;
        particles[1].vx = 0,5;
        particles[1].vy = 0,;
        particles[1].m = 10;
 
        particles[2].x = 110;
        particles[2].y = 100;
        particles[2].vx = 0,2;
        particles[2].vy = 0;
        particles[2].m = 7;
 
        particles[3].x = 115;
        particles[3].y = 100;
        particles[3].vx = 0,15;
        particles[3].vy = 0;
        particles[3].m = 5;
 
        particles[4].x = 116;
        particles[4].y = 100;
        particles[4].vx = 0,15;
        particles[4].vy = 0;
        particles[4].m = 5;
 
        particles[5].x = 120;
        particles[5].y = 100;
        particles[5].vx = 0,15;
        particles[5].vy = 0;
        particles[5].m = 5;
 
        particles[6].x = 165;
        particles[6].y = 100;
        particles[6].vx = 0,15;
        particles[6].vy = 0;
        particles[6].m = 5;
 
        particles[7].x = 170;
        particles[7].y = 100;
        particles[7].vx = 0,15;
        particles[7].vy = 0;
        particles[7].m = 5;
 
        particles[8].x = 180;
        particles[8].y = 100;
        particles[8].vx = 0,15;
        particles[8].vy = 0;
        particles[8].m = 5;
 
        particles[9].x = 190;
        particles[9].y = 100;
        particles[9].vx = 0,15;
        particles[9].vy = 0;
        particles[9].m = 5;
 
 
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
        glutInitWindowSize(200, 200);
        glutInitWindowPosition(20, 810);
        glutCreateWindow("Gravitation");
        
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0, 200, 200, 0, -1, 1);
        glutDisplayFunc(display);
        timer();
        glutMainLoop();
        return 0;
}
Добавлено через 4 часа 49 минут
и ещё есть вопрос о том как сделать приложением чтоб сразу запускалось=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2011, 22:49     Поправьте код.
Посмотрите здесь:

Поправьте пожалуйста код ... C++
Поправьте код!!! C++
Поправьте код... C++
Поправьте пожалуйста код C++
Поправьте пожалуйста код. C++
Поправьте код C++
Поправьте код C++
Поправьте Код C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aneron
 Аватар для Aneron
157 / 156 / 12
Регистрация: 20.04.2010
Сообщений: 570
22.05.2011, 23:05     Поправьте код. #2
ммм. Код смотреть не буду,говорю сразу. Для вращения есть функция glRotate а для изменения радиуса glTranslate. Чтоб обеспечить вращение по нужному радиусу орбиты просто просчитай нужный радиус и сдвинь фигуру по одной из осей на нужный радиус. Потом вращай. Советую уроки nehe посмотреть. Там точно есть реализация этой задачи )

и раз не вмещается,значит нужно перенести всю красоту в глубь экрана. Тогда все вместится
Yandex
Объявления
22.05.2011, 23:05     Поправьте код.
Ответ Создать тему
Опции темы

Текущее время: 09:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru