Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с кодом симулятор солнечной системой? (язык Си)

Семён Куликов Гуру (2807), закрыт 6 дней назад
Вот код, такой код пойдёт?:
 #include  
#include
#include
#include

#define PI 3.14159265359
#define PLANETS_COUNT 9

void draw_planet(int cx, int cy, int x, int y, float angle, int fg, int bg);

int main(void) {
float x[PLANETS_COUNT], y[PLANETS_COUNT], angle[PLANETS_COUNT], step[PLANETS_COUNT];
int planets;
char buf[80];
int gdriver = DETECT, gmode, errorcode;

initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if(errorcode != grOk) return -1;

for(planets=0; planets if(planets > 0) { x[planets] = x[planets-1]+15; y[planets]=y[planets-1]+15; }
else { x[planets] = 40; y[planets]=40; }
}
for(planets=0; planets while(!kbhit()) {
setcolor(WHITE);
circle(250, 250, 20);
setfillstyle(SOLID_FILL, YELLOW);
floodfill(252, 252, WHITE);
for(planets=0; planets angle[planets] += step[planets];
if(angle[planets] >= 359) angle[planets] = 0;

draw_planet(250, 250, x[planets], y[planets], angle[planets], WHITE, BLUE);
sprintf(buf, "%d %f", planets, angle[planets]);
outtextxy(10, 20+(planets*10),buf);
}
cleardevice();
}

getch();
closegraph();
return 0;
}

void draw_planet(int cx, int cy, int x, int y, float angle, int fg, int bg) {
float nx, ny;
nx = (x * cos(angle*(PI/180))) - (y * sin(angle*(PI/180)));
ny = (x * cos(angle*(PI/180))) + (y * sin(angle*(PI/180)));
setcolor(fg);
circle(cx + nx, cy + ny, 5);
setfillstyle(SOLID_FILL, bg);
floodfill(cx+2+nx, cy+2+ny, fg);
}

Вот так анимация мерцает, что делать?:
Лучший ответ
Батаев Дмитрий Просветленный (22434) 1 неделю назад
не обещаю, но посмотрю что и как
Батаев ДмитрийПросветленный (22434) 1 неделю назад
 #include  
#include
#include
#include
#define PI 3.14159265359
#define PLANETS_COUNT 9
void draw_planet(int cx, int cy, int x, int y, float angle, int fg, int bg);
int main(void) {
float x[PLANETS_COUNT], y[PLANETS_COUNT], angle[PLANETS_COUNT], step[PLANETS_COUNT];
int planets; char buf[80];
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if(errorcode != grOk) return -1;

Батаев ДмитрийПросветленный (22434) 1 неделю назад
 for(planets=0; planets        if(planets > 0) { x[planets] = x[planets-1]+15; y[planets]=y[planets-1]+15; }  
else { x[planets] = 40; y[planets]=40; }
}
for(planets=0; planets { angle[planets] = rand() % 50; step[planets] = 1 + rand() %4; }

setcolor(WHITE);
setfillstyle(SOLID_FILL, YELLOW);
circle(350, 240, 20);
floodfill(352, 242, WHITE);
Батаев ДмитрийПросветленный (22434) 1 неделю назад
 while(!kbhit())   
{
for(planets=0; planetsdraw_planet(350, 240, x[planets], y[planets], angle[planets], BLACK, BLACK);
angle[planets] += step[planets];
if(angle[planets] >= 359) angle[planets] = 0;
draw_planet(350, 240, x[planets], y[planets], angle[planets], WHITE, BLUE);
sprintf(buf, "%d %f", planets, angle[planets]);
outtextxy(10, 10+(planets*15),buf);
}}
getch(); closegraph();
return 0;}
void draw_planet(int cx, int cy, int x, int y, float angle, int fg, int bg) {
float nx, ny;
nx = (x * cos(angle*(PI/180))) - (y * sin(angle*(PI/180)));
ny = (x * cos(angle*(PI/180))) + (y * sin(angle*(PI/180)));
setcolor(fg);
circle(cx + nx, cy + ny, 5);
setfillstyle(SOLID_FILL, bg);
floodfill(cx+2+nx, cy+2+ny, fg);}
Батаев ДмитрийПросветленный (22434) 1 неделю назад
из-за ограничения на 800 символов пришлось разбить код. РАБОТАЕТ. Просто выводить нужно не примитивно, а как когда-то на первых компах с выдумкой
Батаев ДмитрийПросветленный (22434) 1 неделю назад
можно и картинки выводить вполне сносно
Батаев ДмитрийПросветленный (22434) 1 неделю назад
Алё, студент!!!! Научился поди???
Семён Куликов Гуру (2807) Батаев Дмитрий, большое спасибо вам!
Остальные ответы
Def Просветленный (45467) 1 неделю назад
>Вот так анимация мерцает, что делать?
Выкидывай graphics.h и используй не настолько допотопные API, поддерживающие двойную буферизацию, хотя бы WinAPI + SwapBuffers.
Батаев ДмитрийПросветленный (22434) 1 неделю назад
библиотека вполне подойдёт для визуализации тригонометрических задач
Батаев ДмитрийПросветленный (22434) 1 неделю назад
Ты бы прежде, чем умничать языки программирования бы выучил бы по-настоящему....
Похожие вопросы