Pull to refresh

Comments 52

Мой код часто называют сложным, даже когда речь не идет о графике. Так что простите, если кто-то пытается в этом разобраться — я для вас добавил комментарии. А также можно сказать, что все условия if для всех элементов часов содержат просто формулу единичного круга разного радиуса, я решил этот момент оставить таким как он есть.

Мечта эпилептика просто. А как этой штукой измерять время - непонятно.

Тут чуть повыше порог вхождения. Думаю со стрелками вы уже разобрались, теперь попробуйте разобраться с дугами; потом с разбитыми дугами для годов (там под это дело выделено 6 секторов с 10 делениями в каждом — по часовой стрелке от нуля записываете длину каждой дуги и получаете что-то вроде 002021 или 2021). Когда разберетесь, это будет не сложнее чем часы.
Я добавил красивую графику, чтоб было не слишком скучно
Если у вас предложение о пересмотре циферблата часов и вы хотите объяснить принцип, то к чему это всё? Это явно отвлекает.
я не понимаю почему таких штук нет в продаже
Создайте физический прототип и появятся. Или хотя бы циферблат для электронных часов на каком-нибудь Android Wear или ещё на чём. Выложите на github для всех или в play market и продавайте, если считаете что их бы кто-то купил.
Например, человек придумал свои бинарные часы. Взял и сделал. Заодно поделился, как он докатился до такой жизни:


А так — поток сознания получился. Попробуйте изложить свои мысли иначе.
Я добавил дугу для текущего дня недели. Почему не сделал сразу — потому что не нашел другого варианта, кроме как ручками считать — в glsl нет зарезирвированого значения для этого числа. Всё еще не уверен, что сделал правильно.

float day() {
float iDatex=iDate.x;
float y366 = ceil(iDatex/4.0);
float y365 = iDatex-y366;
y366*=366.0;
y365*=365.0;
float d=y366+y365;
if (iDate.y >= 0.0) d+=0.0;
if (iDate.y >= 1.0) d+=31.0;
if (iDate.y >= 2.0 && int(mod(iDatex, 4.0))==0) d+=29.0;
if (iDate.y >= 2.0 && int(mod(iDatex, 4.0))!=0) d+=28.0;
if (iDate.y >= 3.0) d+=31.0;
if (iDate.y >= 4.0) d+=30.0;
if (iDate.y >= 5.0) d+=31.0;
if (iDate.y >= 6.0) d+=30.0;
if (iDate.y >= 7.0) d+=31.0;
if (iDate.y >= 8.0) d+=31.0;
if (iDate.y >= 9.0) d+=30.0;
if (iDate.y >= 10.0) d+=31.0;
if (iDate.y >= 11.0) d+=30.0;
d+=iDate.z-4.0;
return mod(d, 7.0)+1.0;
}

Я сварщик не настоящий, но ощущение, что если приходится писать 100500 иф-ов, то что-то явно идёт не так.

… это вы так день недели вычисляете, серьезно?

А как бы сделали Вы? Параметров даты и времени там всего несколько штук, я не вижу другого способа
год, номер которого кратен 400, — високосный;
остальные годы, номер которых кратен 100, — невисокосные (например, годы 1700, 1800, 1900, 2100, 2200, 2300);
остальные годы, номер которых кратен 4, — високосные.
-из Wiki
ваш календарь перестанет работать в 2100 году — он делится на 4 — но не высокосный
Спасибо, я уже и забыл эти правила. Я сделал фикс, проверил дату для 5 годов — резултаты вроде сходится, но меня как-то смущает косяк d+iDate.z-2.0 — немного не понимаю откуда берется эта двойка.

Взял бы стандартную библиотеку, которая учитывает особенности дурацкого человеческого календаря.

Это не JS, для GLSL ничего готового нет, очень минималистичный язык программирования, но удобный и быстрый для программирования пикселей.

Значит, этот язык не очень подходит для решения вашей задачи в том виде, в котором вы пытаетесь ее решить.

Этот язык идеально подходит для решения этой задачи, его поддерживает любой современный браузер почти для всех ОС, включая мобильные платформы, и он позволяет производить быстрые вычисления на видеокарте. На других языках, не поддерживающих программирование шейдеров, такая анимация будет очень жестко тормозить, конкретно за Go и JavaScript — отвечаю, я пытался там генерировать фракталы. Короче не умничай, если не умеешь.
Этот язык идеально подходит для решения этой задачи

Если вы не можете на нем нормально работать с датами — нет.


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

Вам для того, чтобы отрисовать часы, которые меняются раз в секунду, и еще несколько секторов, которые меняются реже, нужны шейдеры и вычисления на видеокарте? Вы точно что-то делаете не так.


(А еще, если я не ошибаюсь, там, где нужно отрисовывать сложную визуализацию, для которой-таки нужна видеокарта, входные данные для этой визуализации таки не обязательно считают на видеокарте)

Волны так не отрисуешь.
Если вы не умеете работать с даами — это Ваши проблемы.
Волны так не отрисуешь.

А они не нужны для решения задачи с часами.


Если вы не умеете работать с даами — это Ваши проблемы.

… сказал человек, который считает день недели через кучку ифов?

Взял бы стандартную библиотеку.


(конкретно для задачи с днем недели есть решение проще, и оно используется в настоящих механических часах, но оно не позволяет отрисовать весь остальной календарь)

Я не понимаю, почему когда когда круглый цифреблат часов способен вмещать в себя день, месяц, год, — почему в массовой продаже не выпускаются такие часы, более точные?

Потому что
(а) они не более точные
(б) востребованность низкая
(ц) весь смысл стрелочных часов в том, чтобы схватывать время при поверхностном взгляде, а ваше решение этого лишено
(д) всю прочую информацию намного проще отобразить на обычном дисплее

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

Именно так. Я же говорю: на то, что вы предлагаете, нет спроса. Работает — не трогай. У меня на часах даже секундной стрелки нет, и я не страдаю особо.


но как это сделать механически, не знают

… а вы знаете, как это сделать механически?

… а вы знаете, как это сделать механически?
Нет, только пиксели могу программировать. Но можно и не отбрасывать вариант с дисплеем.
Работает — не трогай.
Да я просто попробовать…
Нет, только пиксели могу программировать.

Что означает, что не надо упрекать других в том, что они не знают, как это сделать механически.


Но можно и не отбрасывать вариант с дисплеем.

А на дисплее все то же самое проще показать обычным текстом.

Вызываю пояснительную бригаду

Не буду комментировать нужность идеи: на всякую странность найдется любитель, а основной функционал собственно часов не страдает.

Но штука прикольная, залипательная, психоделически-гипнотическая, и, как таковая, имеет право на жизнь.

Я немного заморочился с годами и сделал срок работы часов чуть меньше чем миллион лет, теперь года читаются не под углом 90 градусов, а под углом 60 — так эффективне можно использовать пространство циферблата.
Вообще отлично получилось!
Спасибо. Вообще когда я писал код к часикам, мне иногда казалось, что циферблат часов специально сделан таким образом чтобы в него могли быть дополнительно записаны календарные единицы времени а также счет количества лет ровно до 1 млн. Для меня теперь загадка, почему всего этого нет в обычных часах.
Загадка, почему «счет количества лет» в обычных часах не ровно 1 млн?
Мне вот до сего дня не приходило в голову смотреть «какой сейчас год» на часах. А ведь и правда, вдруг уже триста две тысячи двадцать первый. И часы ещё 700 тысяч лет проработают, а там, глядишь, автор запилит обновление. Ляпота.
Период обращения Солнечной системы вокруг ядра галактики около 230 млн лет. Странно, почему этого нет ни в обычных, ни в необычных часах.
Если использовать пятиричную систему исчисления, то можно записать до 250 мл лет, но так как остальные числа часов считаются в десятеричной, это было бы немного не удобно. Хотя возможно это можно сделать и дргим способом
Система счисления неважно какая. Часы и календарь — это методики для учёта циклически повторяющихся событий. Отсюда круглый циферблат и зубчатые колёса в механике и счётчики в электрических часах. Циклы, конечно же, можно интерпретировать как волны. Но, во первых, это совершенно не наглядно. Во вторых, календарь у нас дурацкий, с месяцами разной длины и добавочными днями. И с невообразимым галактическим годом. В циклической модели это более-менее решается. В волновой — я не понял как.
Согласен что григарианский календарь не очень. Но я не понимаю, что Вы имеете ввиду, когда говорите о волнах?
что Вы имеете ввиду, когда говорите о волнах?

image

Что-то вроде этого. Но над этой концепцией ещё думать и думать… ;)
Я добавил отображение галактического года в виде красных дуг для пятиричной системы исчисления (всего 244140624 лет) — для начала неплохо, но в будущем нуждается в корректировке. Дуговой счетчик миллиона лет остается не тронутым.
Всё-таки пятеричная система негодится. Но я добавил вместо неё еще 1 млн для подсчета количества прошедших миллионов лет, и поставил на часах возраст вселенной (13 млрд лет). Часы будут работать еще около 987 млрд лет.

Мне кажется вам бы сюда добавить скриншоты с примерами и пояснениями.

В общем смысле я понял что вы пытаетесь сделать, но например сказать точную дату на ваших часах не могу.

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

Для того чтоб вычислить год, разделяете круг циферблата на 6 частей (у вас получится по 10 секундных/минутных делений в каждом). Длина дуги в каждой из частей обозначает одну цифру года. Потом записываете их по одной цифре в порядке часовой стрелки от нуля (ноль посередине вверху): 002021 — начальные нули обрезаются.

Со стрелками вроде всё понятно; может стоит уточнить что если часовая стрелка направлена на темную область, то сейчас первая половина суток, на светлую — вторая. (циферблат, можно сказать, вращается вместе со стрелкой, кроме моментов переходов am/pm).
Граница зеленого и желтого…
Длинна зеленой дуги…


Дальтоники проходят мимо, здесь нет ничего интересного.

Для того чтоб вычислить год..


А зачем его вычислять? Дисплей — чтобы смотреть.
Ну год можно моментально определить по последнему значению или по памяти. Значения дат тоже не надо сидеть и обрабатывать каждую секунду, а если она сменится, вы моментально это заметитите, остается только привыкнуть к циферблату без цифр: у меня в комнате висят такие часы, — так что мне не было очень сложно.
а если она сменится, вы моментально это заметитите


Если именно в этот момент смотрю на дисплей — замечу, конечно. Иначе, конечно же, нет.
… и жизнь приобрела смысл ¯\_(ツ)_/¯
Я не понимаю, почему когда когда круглый цифреблат часов способен вмещать в себя день, месяц, год, — почему в массовой продаже не выпускаются такие часы, более точные?

Ну циферблат много вместить может, только зачем?
Вам не кажется, что индикация дня недели немного более важна, чем индикация года? Или я её не заметил, запутавшись в дугах, секторах и стрелках?
И месяц, я уверен, многие назовут сразу, не глядя (в крайнем случае поглядев на число, если забыли сколько дней в месяце).

Представьте, что через 2000 лет учёные/археологи обнаружат ваш код. Попытаются восстановить «Антикитерский механизм», возможно решат, что он связан с верованиями, или применялся для подсчёта движения тел небесных. Вы им задали нелёгкую задачу: с вашими ифами они могут подумают о чём-то потустороннем…

с вашими ифами

Решат, что это такой древний стиль программирования. Как гекзаметр в поэзии.

измеряющих время в 7300000-7320000 больших размерах

Вам бы поработать над изложением мыслей. Очень трудно понимать такие фразы.
вообще эта цитата из моей статьи уже немного не соответствует действительности, я кое-что изменил, на данный момент, если говорить простым языком мои часы идут на второй круг раз в миллион лет, вместо классических 12 часов.
Я не про содержание, а про форму. Эта фраза сломала мой мозг. И так почти весь текст.

Прошу вас, перепишите ваш текст как минимум три раза: первый раз развернув все абстракции на один уровень ниже, второй раз, добавив контекста к сущностям, которые слабо знакомы большинству читателей (подумайте, какие это сущности), и третий раз -- с отладчиком (человеком-редактором).

Я сделал небольшое ответвление для нового проекта (хотя не очень удобно называть проектом 200-300 строк кода).

www.shadertoy.com/view/7tXGRr теперь вместо часов можно записать в кружок данные любой банковской карты со сроком активности и проверочным кодом. Так как все готовые валидные значения карт уже прорисованы внутри кольцевой матрицы, это чем-то напоминает банк, — так что это шейдерный банк.
Sign up to leave a comment.

Articles