Я сейчас более 8 часов пытаюсь решить эту проблему, но не могу понять, пожалуйста, помогите найти, что не так с моим кодом.
int main() {
int gd = DETECT, gm;
float ANGLE = 360/10 * M_PI/180;
initgraph(&gd, &gm, NULL);
int cx = getmaxx() / 2;
int cy = getmaxy() / 2;
int p[] = {cx-50,cy-150, cx+50,cy-150, cx+50,cy-50, cx-50,cy-50, cx-50,cy-150};
outtextxy(cx, cy, "*");
setcolor(G);
int n, i;
for (n = 0; n < 10; n++)
{
drawpoly(5, p);
for (i = 0; i < 10; i+=2)
{
p[i] = p[i]*cos(ANGLE) - p[i+1]*sin(ANGLE) + cx - cx*cos(ANGLE) + cy*sin(ANGLE);
p[i+1] = p[i]*sin(ANGLE) + p[i+1]*cos(ANGLE) + cy - cx*sin(ANGLE) - cy*cos(ANGLE);
}
}
getch();
closegraph();
return (0);
}
Но мне это нужно.
5 баллов, соединяется с первым, другими словами, это то же самое (требуется для функции drawpoly).
Обратите внимание, что в p[i+1] = p[i]*...p[i] - это новыйp[i], а не старый. Разве нельзя использовать старую?
блин ты прав, попробую еще раз поменять и протестировать.
Кто бы ни учил вас использовать графику BGI в 2018 году, тот должен ударить по голове компьютером с MS DOS.
Ха-ха, правда, это мой университет, видимо его не интересуют прогресс





Спасибо Полу Огилви. Я использовал p [i] с измененным значением вместо старого, чтобы преобразование работало. еще раз спасибо!
Новый код:
int main() {
int gd = DETECT, gm;
float ANGLE = 360/10 * M_PI/180;
initgraph(&gd, &gm, NULL);
int cx = getmaxx() / 2;
int cy = getmaxy() / 2;
int p[] = {cx-50,cy-150, cx+50,cy-150, cx+50,cy-50, cx-50,cy-50, cx-50,cy-150};
outtextxy(cx, cy, "*");
setcolor(G);
int n, i, save;
for (n = 0; n < 10; n++)
{
drawpoly(5, p);
for (i = 0; i < 9; i+=2)
{
save = p[i];
p[i] = p[i]*cos(ANGLE) - p[i+1]*sin(ANGLE) + cx - cx*cos(ANGLE) + cy*sin(ANGLE);
p[i+1] = save*sin(ANGLE) + p[i+1]*cos(ANGLE) + cy - cx*sin(ANGLE) - cy*cos(ANGLE);
}
}
getch();
closegraph();
return (0);
}
И вывод:
Вместо повторного вращения с помощью ANGLE, вы должны попытаться увеличивать ANGLE с постоянным шагом и преобразовывать начальные точки. Ваш нынешний подход начнет искажаться из-за потери точности.
это не имеет значения, потому что он остановится на 8 из-за i + = 2.