All streams
Search
Write a publication
Pull to refresh
11
0
Send message
Если использовать пятиричную систему исчисления, то можно записать до 250 мл лет, но так как остальные числа часов считаются в десятеричной, это было бы немного не удобно. Хотя возможно это можно сделать и дргим способом
Волны так не отрисуешь.
Если вы не умеете работать с даами — это Ваши проблемы.
Этот язык идеально подходит для решения этой задачи, его поддерживает любой современный браузер почти для всех ОС, включая мобильные платформы, и он позволяет производить быстрые вычисления на видеокарте. На других языках, не поддерживающих программирование шейдеров, такая анимация будет очень жестко тормозить, конкретно за Go и JavaScript — отвечаю, я пытался там генерировать фракталы. Короче не умничай, если не умеешь.
Ну год можно моментально определить по последнему значению или по памяти. Значения дат тоже не надо сидеть и обрабатывать каждую секунду, а если она сменится, вы моментально это заметитите, остается только привыкнуть к циферблату без цифр: у меня в комнате висят такие часы, — так что мне не было очень сложно.
Это не JS, для GLSL ничего готового нет, очень минималистичный язык программирования, но удобный и быстрый для программирования пикселей.
вообще эта цитата из моей статьи уже немного не соответствует действительности, я кое-что изменил, на данный момент, если говорить простым языком мои часы идут на второй круг раз в миллион лет, вместо классических 12 часов.
… а вы знаете, как это сделать механически?
Нет, только пиксели могу программировать. Но можно и не отбрасывать вариант с дисплеем.
Работает — не трогай.
Да я просто попробовать…
Спасибо. Вообще когда я писал код к часикам, мне иногда казалось, что циферблат часов специально сделан таким образом чтобы в него могли быть дополнительно записаны календарные единицы времени а также счет количества лет ровно до 1 млн. Для меня теперь загадка, почему всего этого нет в обычных часах.
Спасибо, я уже и забыл эти правила. Я сделал фикс, проверил дату для 5 годов — резултаты вроде сходится, но меня как-то смущает косяк d+iDate.z-2.0 — немного не понимаю откуда берется эта двойка.
Граница зеленого и желтого — номер месяца по часовой стрелке. Длинна зеленой дуги в секундах или минутах — порядковый номер дня, длинна желтой — день недели.

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

Со стрелками вроде всё понятно; может стоит уточнить что если часовая стрелка направлена на темную область, то сейчас первая половина суток, на светлую — вторая. (циферблат, можно сказать, вращается вместе со стрелкой, кроме моментов переходов am/pm).
Тут чуть повыше порог вхождения. Думаю со стрелками вы уже разобрались, теперь попробуйте разобраться с дугами; потом с разбитыми дугами для годов (там под это дело выделено 6 секторов с 10 делениями в каждом — по часовой стрелке от нуля записываете длину каждой дуги и получаете что-то вроде 002021 или 2021). Когда разберетесь, это будет не сложнее чем часы.
А как бы сделали Вы? Параметров даты и времени там всего несколько штук, я не вижу другого способа
а может они просто воспроизводят одну и ту же технологию, с которой имеют дело ни одну сотню лет и которая имеет спрос? они знают, что стрелочные часы могли бы показывать больше информации со своим циферблатом, но как это сделать механически, не знают, — но это и не так важно, когда можно использовать часы с электронным дисплеем, или использовать дополнительные циферблаты.
Я немного заморочился с годами и сделал срок работы часов чуть меньше чем миллион лет, теперь года читаются не под углом 90 градусов, а под углом 60 — так эффективне можно использовать пространство циферблата.
Я добавил дугу для текущего дня недели. Почему не сделал сразу — потому что не нашел другого варианта, кроме как ручками считать — в 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;
}
Мой код часто называют сложным, даже когда речь не идет о графике. Так что простите, если кто-то пытается в этом разобраться — я для вас добавил комментарии. А также можно сказать, что все условия if для всех элементов часов содержат просто формулу единичного круга разного радиуса, я решил этот момент оставить таким как он есть.
сегодня на shadertoy предложили версию этой игры в 6 строк:

void mainImage (out vec4 O, in vec2 U) {
vec2 q = iResolution.xy / 2., c = Uq, s = sin (c / 40.), m = iMouse.xy-U;
float F = abs (pow (1.02, iTime) * dot (m, m) * sx * sy);
int v = 255, R = int (F * exp2 (24.-4. * ceil (log2 (F) / 4.)));
O = vec4 ((R >> 16) & v, (R >> 8) & v, R & v, 0.) / 255 .;
}
Если вам интересно, мембраны обычно рвутся при использовании побитовых операций в функции f между переменными — я бы сказал, это происходит почти всегда. Но рвутся не значит перестают существовать, просто в таком случае мембрана выглядит разорванной, а клеточная структура — нарушенной, но очертания контуров обычно остаются.
Вы бы лучше форкнули, или хотя бы логику и визуализацию игры обсудили, а вы обсуждаете мои социальные навыки и слово «аутист»…
IT-сообщество, блин
Официально я шизофренник (для вас это имеет значение?)

Information

Rating
Does not participate
Registered
Activity