Звезда
Рисование пятиконечной звезды с помощью тригонометрии. Программа показывает, как выделить логику рисования в отдельный алгоритм с параметрами.
Разбор
Главный алгоритм
использовать Чертежник
алг
нач
звезда(0.0, 0.0, 4.0, 1.6, 5)
кон
Главный алгоритм вызывает процедуру звезда с пятью параметрами: центр $(0, 0)$, внешний радиус $4{,}0$, внутренний радиус $1{,}6$ и количество лучей $5$.
Параметры звезды
алг звезда(вещ cx, вещ cy, вещ outerRadius, вещ innerRadius, цел n)
нач
цел i
вещ angle, x, y
вещ startX, startY
Процедура принимает:
cx,cy-- координаты центра звездыouterRadius-- расстояние от центра до кончиков лучейinnerRadius-- расстояние от центра до впадин между лучамиn-- количество лучей
Чем больше разница между outerRadius и innerRadius, тем острее лучи.
Начальная точка
angle := -3.14159 / 2.0 | Начинаем сверху
x := cx + outerRadius * cos(angle)
y := cy + outerRadius * sin(angle)
startX := x
startY := y
поднять перо
сместиться в точку(x, y)
опустить перо
выбрать чернила(6) | желтый
Начальный угол $-\frac{\pi}{2}$ обеспечивает, что первая вершина находится строго сверху. Координаты вычисляются переводом из полярной системы в декартову:
$x = cx + r \cdot \cos(\alpha), \quad y = cy + r \cdot \sin(\alpha)$
Перо поднимается для перемещения в начальную точку без рисования, затем опускается.
Рисование лучей
нц для i от 0 до n - 1
| Внутренняя точка
angle := -3.14159 / 2.0 + (2.0 * i + 1.0) * 3.14159 / n
x := cx + innerRadius * cos(angle)
y := cy + innerRadius * sin(angle)
сместиться в точку(x, y)
| Внешняя точка
angle := -3.14159 / 2.0 + 2.0 * (i + 1.0) * 3.14159 / n
x := cx + outerRadius * cos(angle)
y := cy + outerRadius * sin(angle)
сместиться в точку(x, y)
кц
Цикл проходит по каждому лучу. На каждом шаге рисуются два отрезка:
- От предыдущей внешней точки к внутренней (впадина между лучами) -- используется
innerRadius. - От внутренней точки к следующей внешней (кончик луча) -- используется
outerRadius.
Всего $2n$ точек равномерно распределены по окружности. Внешние точки расположены через каждые $\frac{2\pi}{n}$ радиан, а внутренние -- посередине между ними.
Полная программа
| Рисование звезды
использовать Чертежник
алг
нач
звезда(0.0, 0.0, 4.0, 1.6, 5)
кон
| Рисует звезду с n лучами
| cx, cy - центр звезды
| outerRadius - внешний радиус
| innerRadius - внутренний радиус
| n - количество лучей
алг звезда(вещ cx, вещ cy, вещ outerRadius, вещ innerRadius, цел n)
нач
цел i
вещ angle, x, y
вещ startX, startY
| Вычисляем первую внешнюю точку
angle := -3.14159 / 2.0 | Начинаем сверху
x := cx + outerRadius * cos(angle)
y := cy + outerRadius * sin(angle)
startX := x
startY := y
| Переходим в начальную точку
поднять перо
сместиться в точку(x, y)
опустить перо
выбрать чернила(6) | желтый
| Рисуем звезду
нц для i от 0 до n - 1
| Внутренняя точка
angle := -3.14159 / 2.0 + (2.0 * i + 1.0) * 3.14159 / n
x := cx + innerRadius * cos(angle)
y := cy + innerRadius * sin(angle)
сместиться в точку(x, y)
| Внешняя точка
angle := -3.14159 / 2.0 + 2.0 * (i + 1.0) * 3.14159 / n
x := cx + outerRadius * cos(angle)
y := cy + outerRadius * sin(angle)
сместиться в точку(x, y)
кц
кон