📖 Документация Qumir

← Вернуться в Playground

← Все примеры

Звезда

Рисование пятиконечной звезды с помощью тригонометрии. Программа показывает, как выделить логику рисования в отдельный алгоритм с параметрами.

Разбор

Главный алгоритм

использовать Чертежник

алг
нач
    звезда(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

Процедура принимает:

Чем больше разница между 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)
    кц

Цикл проходит по каждому лучу. На каждом шаге рисуются два отрезка:

  1. От предыдущей внешней точки к внутренней (впадина между лучами) -- используется innerRadius.
  2. От внутренней точки к следующей внешней (кончик луча) -- используется 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)
    кц
кон

▶ Запустить пример