Найти в Дзене

Рисование спирали на Бейсике

Всем привет! Очередное творение из прошлого: расширяющиеся из центра спирали. Размер кода со всеми примечаниями всего 30 с небольшим строк. Пример того, насколько простой в реализации может быть компьютерная графика. Как мы баловались в детстве. Программа рисует спираль, которая начинается с центральной точки экрана и постепенно расширяется, увеличивая радиус. Поскольку угол спирали увеличивается постепенно, точки будут располагаться по спиральной траектории, и по мере увеличения радиуса они будут всё дальше удаляться от центра. Собственно, сам код: SCREEN 12 CLS ' Initial parameters R = 0 ' Starting angle X = 320 ' Starting X position (center of the screen) Y = 240 ' Starting Y position (center of the screen) size = 2 ' Line size angleIncrement = 0.1 ' Angle increment radius = 1 ' Radius DO ' Calculate new coordinates xOffset = radius * COS(R) yOffset = radius * SIN(R) ' Round coordinates to integers and draw a point on the screen PSET (INT(X + xOffset + 0.5), INT(Y + yOffset + 0.5))
Оглавление

Всем привет! Очередное творение из прошлого: расширяющиеся из центра спирали. Размер кода со всеми примечаниями всего 30 с небольшим строк. Пример того, насколько простой в реализации может быть компьютерная графика. Как мы баловались в детстве.

Программа рисует спираль, которая начинается с центральной точки экрана и постепенно расширяется, увеличивая радиус. Поскольку угол спирали увеличивается постепенно, точки будут располагаться по спиральной траектории, и по мере увеличения радиуса они будут всё дальше удаляться от центра.

Собственно, сам код:

SCREEN 12
CLS
' Initial parameters
R = 0 ' Starting angle
X = 320 ' Starting X position (center of the screen)
Y = 240 ' Starting Y position (center of the screen)
size = 2 ' Line size
angleIncrement = 0.1 ' Angle increment
radius = 1 ' Radius
DO
' Calculate new coordinates
xOffset = radius * COS(R)
yOffset = radius * SIN(R)
' Round coordinates to integers and draw a point on the screen
PSET (INT(X + xOffset + 0.5), INT(Y + yOffset + 0.5)), 15 ' 15 is the color code for white
' Increment the angle for the next point
R = R + angleIncrement
' Increase the radius to expand the spiral
radius = radius + 0.05
' Slow down the loop to create smooth animation
FOR i = 1 TO 50000: NEXT i
' Exit the loop if any key is pressed
IF ABS(INT(X + xOffset + 0.5)) > 800 THEN EXIT DO
LOOP
END

Давайте разберем его шаг за шагом, чтобы понять, как он работает:

1. Инициализация параметров

  • R = 0: Угол, с которого начинается рисование, установлен в 0. Это начальный угол для вычисления координат точки на окружности.
  • X = 320, Y = 240: Начальная позиция рисования точки установлена в центре экрана (предполагая, что экран имеет разрешение 640x480).
  • size = 2: Эта переменная нигде не используется в коде, возможно, она предназначена для указания толщины линии, но она не влияет на конечный результат.
  • angleIncrement = 0.1: Увеличение угла на каждом шаге. Это влияет на "плотность" спирали — меньшие значения создают более гладкую спираль.
  • radius = 1: Начальный радиус окружности, с которой начинается спираль.

2. Главный цикл

Программа использует бесконечный цикл DO ... LOOP, в котором выполняются следующие шаги:

Расчет новых координат

  • xOffset = radius * COS(R): Вычисляется смещение по оси X для текущей точки на спирали, используя радиус и угол.
  • yOffset = radius * SIN(R): Аналогично вычисляется смещение по оси Y.

Эти значения смещения рассчитываются с использованием тригонометрических функций, чтобы точки следовали по круговой траектории. Угол R увеличивается, что позволяет точкам двигаться вдоль спирали.

Отображение точки

  • PSET (INT(X + xOffset + 0.5), INT(Y + yOffset + 0.5)), 15: Команда рисует точку на экране в вычисленных координатах. Для этого к текущим координатам центра экрана (X и Y) прибавляются смещения по осям (xOffset и yOffset), и результат округляется до ближайшего целого числа. Цвет точки задается значением 15, что соответствует белому цвету.

Изменение угла и радиуса

  • R = R + angleIncrement: Угол увеличивается на angleIncrement, что заставляет рисуемую точку перемещаться по спирали.
  • radius = radius + 0.05: Радиус увеличивается на фиксированное значение (0.05), что расширяет спираль с каждым шагом и позволяет ей выходить за пределы начального круга.

Замедление анимации

  • FOR i = 1 TO 50000: NEXT i: Этот цикл служит для замедления работы программы, чтобы анимация была плавной. Это не самый эффективный способ замедления, но он работает, заставляя процессор задерживать выполнение программы.

Завершение цикла

  • IF ABS(INT(X + xOffset + 0.5)) > 800 THEN EXIT DO: Если X-координата выходит за пределы экрана (800 пикселей), программа завершает цикл рисования и останавливает выполнение.

3. Завершение программы

  • END: Завершение программы. После выхода из цикла, программа заканчивает выполнение.

-------------------------

Смотрите другие статьи на тему программирования на Бейсике.

Учебник Программирование на Бейсике для начинающих

-------------------------

Комменты приветствуются, за палец вверх - отдельное спасибо. Удачи в творчестве!