Как происходит "вращение" 2д картинки в консоли?

Как происходит "вращение" 2д картинки в консоли? Я смог нарисовать вот такой вот квадратик и мне надо заставить его крутиться с указанной изначально скоростью в коде. Как это сделать? Желательно с объяснением.

#include<stdio.h>

#define height 30
#define width 30

typedef struct {
int x;
int y;
} point;

point center = {15, 15};

point points[4] {
{-1, 1},
{1, 1},
{1, -1},
{-1, -1}
};

int screen[height][width];

int main() {
for(int y = 0; y < height; ++y) {
 for(int x = 0; x < width; ++x) {
   screen[y][x] = 0;
 }
}

for(int label = 0; label < sizeof(points); ++label) {
 point point = points[label];

 int x = (point.x * 3) + center.x;
 int y = (point.y * 3) + center.y;

 screen[y][x] = 1;
}

for(int y = 0; y < height; ++y) { 
 for(int x = 0; x < width; ++x) {
   printf("%s", screen[y][x] == 1? "#" : "   ");
 }
 printf("\n");
}
}

Ответы (1 шт):

Автор решения: S.H.

С объяснением? их есть у меня...

Как я понял, Вы нарисовали "квадратик" методом печати символа # в нужных местах экрана. Это - другими словами - называется "псевдографика", хотя и об этом названии можно поспорить.

Теперь Вы хотите заставить эту картинку вращаться. Логично предположить, что для этого нужно стереть на экране символы # на "старых" местах, и напечатать их на новых местах.

Но есть проблема. При выводе "картинки" с использованием "printf" весь вывод осуществляется "как на пишущей машинке": печатать идёт всегда в последнюю строку экрана. При этом получится что напечатается первая картинка, потом она сдвинется вверх и напечатается вторая.

Это не очень красиво, и для преодоления этого неудобства придумали такую штуку как screen buffer. Если про это погуглить - то найдутся примеры кода, в котором показано, как сделать вторую картинку и потом поменять первую и вторую местами. ЭЭто происходит почти мгновенно, так что таким образом у Вас может действительнно возникнуть эффект движения.

→ Ссылка