Графика (вращение в 2D)

Я сейчас более 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);
}

Графика (вращение в 2D)

Но мне это нужно.

Графика (вращение в 2D)

это не имеет значения, потому что он остановится на 8 из-за i + = 2.

Dpetrov 18.05.2018 14:40

5 баллов, соединяется с первым, другими словами, это то же самое (требуется для функции drawpoly).

Dpetrov 18.05.2018 14:42

Обратите внимание, что в p[i+1] = p[i]*...p[i] - это новыйp[i], а не старый. Разве нельзя использовать старую?

Paul Ogilvie 18.05.2018 14:45

блин ты прав, попробую еще раз поменять и протестировать.

Dpetrov 18.05.2018 14:46

Кто бы ни учил вас использовать графику BGI в 2018 году, тот должен ударить по голове компьютером с MS DOS.

Lundin 18.05.2018 14:51

Ха-ха, правда, это мой университет, видимо его не интересуют прогресс

Dpetrov 18.05.2018 14:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Спасибо Полу Огилви. Я использовал 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);
}

И вывод:

yep

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

Ajay Brahmakshatriya 18.05.2018 15:03

Другие вопросы по теме