смотрел туториал по 3д в консоли от онигири
и вот я не понял как работает движение круга
#include
using namespace std;
int main()
{
int width = 120;
int height = 30;
float aspect = (float)width / height;
float pixeAspect = (float)11.0f / 24.0f;
char* screen = new char[width * height + 1];
screen[width * height] = '\0';
for (int t = 0; t < 10000; t++)
{
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
char pixel = ' ';
float x = (float)i / width * 2.0f - 1.0f;
float y = (float)j / height * 2.0f - 1.0f;
x *= aspect * pixeAspect;
x += sin(t * 0.001);
if (x * x + y * y < 0.5)
pixel = '@';
screen[i + j * width] = pixel;
}
}
printf(screen);
}
getchar();
}
это код
но как работает эта строка:
x += sin(t * 0.001);
и что означает число 10000
в этой:
for (int t = 0; t < 10000; t++)
sin - скорость будет изменяться по закону синуса - отрицательная перетекает в положительную и наоборот.
0.001 - коэфициент, указывающий как быстро будет меняться эта скорость (один шаг отрисовки = 1, полный период - это 2 Пи, т.е. один полный цикл совершается за примерно 6 отрисовок. А с учетом этого коэфициента нужно около 6000 отрисовок.
10000 - количество отрисовок (кадров)
Круг рисуется путем проверки, входят ли координаты текущего символа в окружность (x*x+y*y < радиус), если да - то ставится знак @ если нет - то пробел.
аспект - размер стандартного окна консоли, задается для того чтобы одна строка кадра занимала ровно весь размер консоли.
аспект пиксель - соотношение высоты и ширины одного пикселя (у консоли это примерно 1:2) нужно чтобы круг не был растянут вдоль или поперек.
Первая строка: к x присваивается x и прибавляется синус переменной t, умноженной на 0.001
Вторая строка: 10000 - число цикла (если t меньше 10000, то число t увеличивается на единицу)
но как работает эта строка: x += sin(t * 0.001);
Эта строка смещает отображаемый круг относительно середины, принимаемой за 0. Другими словами, эта строка отвечает за гармонические колебания отображаемого круга по горизонтали.
Скорость задаётся коэффициентом при t. Полный цикл колебания совершается за 2π/k итераций. При k=0.001 полный цикл совершается за 6284 итерации.
что означает число 10000
Количество итераций отображения.
Предположу, что строка с синусом отвечает за скорость
А цикл - просто кол-во совершаемых итераций