Любитель создал часы для отслеживания сортировки мусора

Энтузиаст Джон Грэм-Камминг представил часы, которые помогают понять, когда и какие отходы нужно готовить к утилизации. 

Автор разработки отмечает, что иногда сложно запомнить дни, когда нужно выбрасывать пластик, металл, бумагу и стекло. Ранее разработчики уже предлагали свои решения проблемы, как, например, это сделал Даррен Тарбард, выпустивший устройство «Bindicator». Оно показывает, какой мусор пора выносить, с помощью разных цветовых индикаторов.

Грэм-Камминг решил предложить свою разработку, но сделать её менее технологичной. Он разработал циферблат часов, используя дешёвые часовые механизмы, где стрелки совершают полный круг за семь дней вместо 12 часов.

Затем он написал код для создания SVG (а также PDF и PNG) для циферблата. Цвета и текст определяются переменными schd и bins. Код должен легко настраиваться, он поддерживает до двух разных типов мусорных баков в день. 

bins = { «none»: [«white», «»], «lixo»: [«#72859E», «Lixo»], «papl»: [«#255FC9», «Papel»], «embl»: [«#DED044», «Embalagens»], } days = [«Sun», «Mon», «Tues», «Wednes», «Thurs», «Fri», «Satur»] schd = [[«none»], [«lixo»], [«papl», «embl»], [«lixo»], [«papl»], [«lixo», «embl»], [«papl»]]

Единственный интересный фрагмент кода — это генерация кривых для семи ежедневных сегментов. Для этого есть функция path:

def getXY(p, r, s): a = 2.0 * math.pi * (p * pps + rot) return s % (r * math.cos(a), r * math.sin(a)) def path(p, r): s = » %.2f %.2f » pa = «M» pa += getXY(p, r, s) pa += «A %.2f %.2f 0 0 1» % (r, r) pa += getXY((p+1), r, s) return pa

Функция принимает два параметра: p — число от нуля до шести, представляющее семь дневных сегментов, необходимых на часах; r — радиус дуги. Функция использует getXY для поиска положения точки на дуге. Она делает это дважды, чтобы найти начальную и конечную точки.

Таким образом, path в конечном итоге возвращает что-то вроде M x0 y0 A r r 0 0 1 x1 y1, где x0, y0, x1, y1 — вычисленные конечные точки дуги, а r — радиус дуги. M x0 y0 означает «перейти к (x0, y0)». A r r 0 0 1 x1 y1 означает «нарисовать дугу радиусом r до точки (x1, y1)». 0 0 1 в середине соответствуют трём параметрам: вращение вокруг оси x, флаг большой дуги и флаг развёртки.

Последняя часть элемента SVG path, L 0 0, добавляется в другом месте кода. Она устанавливает центр дуги в (0, 0). Энтузиаст использовал атрибут viewBox SVG, чтобы геометрия SVG находилась между (-1, -1) и (1, 1), таким образом создавая центр изображения (0, 0).

print(» % (wh, wh))

Циферблат встроен в обычную деревянную рамку для картины.

Часы работают от батарейки.

Источник: habr.com

0 0 голоса
Рейтинг новости
154
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии