Рисуем сектора, дуги, окружности

Разработка скриптов на lua. Создание виджетов, диалогов и т.д.
Ответить
Аватара пользователя
olgmen
Сообщения: 155
Зарегистрирован: 30 ноя 2012, 11:00
Темы: 32
Откуда: Санкт-Петербург
Статус: Не в сети

Рисуем сектора, дуги, окружности

Сообщение olgmen » 14 янв 2014, 19:50

До этого я уже писал, все рисунки начинаются с точки. Для секторов, дуг и окружностей, это конечно центр окружности, но начало окружности начинается с точки расположенной на горизонтальной прямой, справа от центра, на расстоянии радиуса. Для вывода окружностей (дуг, секторов) в cairo есть две команды

cr:arc(x, y, radius, angel1, angel2) - рисует окружность по часовой стрелке
cr:arc_negative(x, y, radius, angel1, angel2) - против часовой стрелки

Здесь: x, y - координаты центра окружности
radius - радиус
angel1 - угол с которого начинается дуга (окружность)
angel2 - угол на котором заканчивается дуга (окружность)

Причем angel1 всегда должен быть меньше angel2. Если надо провести дугу, например от 180 градусов через 0 до 90 градусов по часовой стрелке, то первый угол равен 180, а второй 360+90 = 450 градусов.

Углы задаются в радианах, но это не очень удобно. Для перевода угловых градусов в радианы используется формула основанная на том, что длина окружности в градусах равна 360, а в радианах - 2 * math.pi. Здесь math означает, что далее следует математический символ, ну а pi, оно и в Африке пи (3,14)

angel * (math.pi/180)

Нарисуем дугу

x = 128
y = 128
radius = 100
angel1 = 45 * (math.pi/180)
angel2 = 180 * (math.pi/180)

cr:set_source_rgb(1,0,0)
cr:set_line_width(10)
cr:arc(x, y, radius, angel1, angel2)
cr:stroke()


Делаем из дуги сектор

cr:set_source_rgb(0,0,0)
cr:arc(x, y, radius, angel1, angel1)
cr:line_to(x, y)
cr:arc(x, y, radius, angel2, angel2)
cr:line_to(x, y)
cr:stroke()


Теперь с теми же данными нарисуем дугу против часовой стрелке

cr:set_source_rgb(0,0,1)
cr:set_line_width(10)
cr:arc_negative(x, y, radius, angel1, angel2)
cr:stroke()


Изображение

Полная окружность

cr:arc(x, y, radius, 0, 2*math.pi)
Кто ищет, тот всегда найдет

Arch Linux
Conky - 1.9

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей