Тема не нова, достаточно набрать в поиске «графическое изображение Пи», чтобы убедиться в этом.
А вот публикация на эту тему на этом ресурсе. Для отображения цифр здесь используется условный цвет, при этом кодировка предельно простая — палитра 10 цветов, каждому произвольно выбранному цвету соответствует своя цифра.
Для заполнения досуга поставил себе задачу отобразить миллион десятичных знаков Пи в условном цвете, таким образом, чтобы (почти) каждый знак был (условно) различим по цвету, на графическом образе без специального увеличения, а в выборе способа кодировки была хоть какая то логика.
В стандартной модели RGB для кодирования одного пиксела используется три байта, по одному на каждый цвет. Воспользуемся этим обстоятельством и определим условный цвет следующим образом — каждые 9 последовательных цифр определяют цвет одного пиксела, три первых R-компоненту, три следующих G-компоненту, три последних из девяти B-компоненту. Далее аналогично кодируется следующий пиксел. Поскольку максимальное значение трехзначного десятичного числа 999, а восьмизначного двоичного 255, произведем масштабирование к диапазону 0 — 255. Теперь стало понятно почему в предыдущем абзаце присутствует слово «почти» в скобках. Разместим точки в квадратном растре. Определимся с количеством точек: 334 х 334 х 9 = 1 004 004 достаточно для миллиона знаков. Но число 334 (абсолютно субъективно) число некрасивое, другое дело 333 — душа радуется, правда до миллиона не доберем: 333 х 333 х 9 = 998001, не будем мелочиться.
Программирование создания картинки несложная задача, поскольку отображение нужного количества знаков в двоично-десятичном виде легко нашлось в интернете. Изначально создал файл в формате bmp, потом в графическом редакторе перевел в jpg.
Растр начинается с нижней левой точки. Для удобства просмотра на экране монитора каждый рассчитанный пиксел представлен на картинке квадратом 3х3, т.е. размерность картинки 999х999. А вот и изображение:
При уменьшении масштаба картинка становится серой, половинной яркости, что свидетельствует о цветовом балансе, иначе говоря о равномерном заполнении объема куба RGB пикселами.
Интересно, как ведут себя фильтры фотошопа с этим изображением, например, Equaiize не меняет картинку, Invert конечно же переворачивает цвета, но уже через секунду взгляду кажется что ничего не изменилось, при использовании Blur Average картинка исчезает (если в качестве фона окна в Фотошопе установлен 50% серый — так по умолчанию), Stylize Trace contour отказывается создавать контуры, и еще много интересного, посмотрите сами.
А вот публикация на эту тему на этом ресурсе. Для отображения цифр здесь используется условный цвет, при этом кодировка предельно простая — палитра 10 цветов, каждому произвольно выбранному цвету соответствует своя цифра.
Для заполнения досуга поставил себе задачу отобразить миллион десятичных знаков Пи в условном цвете, таким образом, чтобы (почти) каждый знак был (условно) различим по цвету, на графическом образе без специального увеличения, а в выборе способа кодировки была хоть какая то логика.
В стандартной модели RGB для кодирования одного пиксела используется три байта, по одному на каждый цвет. Воспользуемся этим обстоятельством и определим условный цвет следующим образом — каждые 9 последовательных цифр определяют цвет одного пиксела, три первых R-компоненту, три следующих G-компоненту, три последних из девяти B-компоненту. Далее аналогично кодируется следующий пиксел. Поскольку максимальное значение трехзначного десятичного числа 999, а восьмизначного двоичного 255, произведем масштабирование к диапазону 0 — 255. Теперь стало понятно почему в предыдущем абзаце присутствует слово «почти» в скобках. Разместим точки в квадратном растре. Определимся с количеством точек: 334 х 334 х 9 = 1 004 004 достаточно для миллиона знаков. Но число 334 (абсолютно субъективно) число некрасивое, другое дело 333 — душа радуется, правда до миллиона не доберем: 333 х 333 х 9 = 998001, не будем мелочиться.
Программирование создания картинки несложная задача, поскольку отображение нужного количества знаков в двоично-десятичном виде легко нашлось в интернете. Изначально создал файл в формате bmp, потом в графическом редакторе перевел в jpg.
Растр начинается с нижней левой точки. Для удобства просмотра на экране монитора каждый рассчитанный пиксел представлен на картинке квадратом 3х3, т.е. размерность картинки 999х999. А вот и изображение:
При уменьшении масштаба картинка становится серой, половинной яркости, что свидетельствует о цветовом балансе, иначе говоря о равномерном заполнении объема куба RGB пикселами.
Интересно, как ведут себя фильтры фотошопа с этим изображением, например, Equaiize не меняет картинку, Invert конечно же переворачивает цвета, но уже через секунду взгляду кажется что ничего не изменилось, при использовании Blur Average картинка исчезает (если в качестве фона окна в Фотошопе установлен 50% серый — так по умолчанию), Stylize Trace contour отказывается создавать контуры, и еще много интересного, посмотрите сами.
Поделиться с друзьями
myxo
То есть это ни о чем не говорящая визуализация любого иррационального числа?
splatt
Я слышал, что если очень долго двигать начальную точку, где-то между нулем и бесконечностью можно наткнуться на портрет Моны-Лизы.
IgorKh
я встречал идею, что поскольку число ПИ иррациональное то любую информацию любого объема можно закодировать смещением ее в десятичном представлении этого числа. Помню в студенческие годы даже на реализацию такого архиватора натыкался.
В оправдание стоит сказать что было еще доказательство того, что в общем случае такое смещение будет длиннее самой информации )
ankh1989
С чего вы взяли, что это возможно?
algrizik
Ну, если Пи — любое, то любого!
Sadler
Все мы когда-то были детьми, все мы писали свой первый «Hello World». Если по гамбургскому счёту, то новизны нет, практической значимости нет, интересной методики нет, сложность работы нулевая, но если это Ваша первая в жизни публикация, то у Вас ещё всё впереди.
algrizik
Не спорю ни с одним Вашим тезисом.
Arcanum7
Почему то вспомнился тест Роршаха — всякая фигня начала мерещиться.
unxed
Наш мозг вообще склонен к ложным срабатываниям в области pattern matching.
Дело в том, что люди, которые принимали странный рельеф за леопарда — выживали, а те, кто принимали леопарда за странный рельеф — умирали.
Так работает естественный отбор.
Между прочим, если не спать суток трое, в шуме воды из-под крана отчетливо слышится человеческая речь. И визуальное восприятие примерно такие же фокусы показывает.
DrPass
> Дело в том, что люди, которые принимали странный рельеф за леопарда — выживали,
> а те, кто принимали леопарда за странный рельеф — умирали
Там на самом деле на выживаемость больше влияло то, с какой стороны дул ветер, со стороны людей или леопарда, и был леопард сытый или голодный :)
algrizik
А я напрягался, напрягался, так ничего и не увидел.
Mad__Max
Я только что-то напоминающее галактические филаменты (крупномасштабную структуру вселенной) «увидел».
GeMir
А ещё можно выложить числа-пикселы по спирали Улама и начать искать несуществующие закономерности…
algrizik
Непонятно как это устроить. В скатерти Улама числовая ось скручена спиралью вокруг нулевой точки и на ней отмечены особые (у Улама — простые) числа. Если размещать непосредственно n-значные числа из последовательности знаков Пи они займут область ограниченную 10 в степени n и ничего интересного не предвидится.
GeMir
Тенденция простых чисел выстраиваться по диагоналям на первый взгляд наводит на мысль о возможном существовании закономерностей. Уровень «интересности» не зашкаливающий, но не зашкаливающий он и у представленной в статье визуализации.
algrizik
Согласен с оценкой «уровня „интересности в обоих случаях. Просто другой способ построения растра, возможно попробую если вдруг что интересное откроется донесу.
GeMir
Спираль Улама 100?100, ноль в центре, простые числа красные: http://georgmierau.de/ulam_100x100.png
Скрипт на Snap.svg выкладывать не буду — очень уж далёк от того, что можно считать хорошим кодом.
tmin10
В своё время, под впечатлением доклада на конференции MS SD con, написал визуализатор бинарных файлов. Сначала просто по битам, в ч/б, потом по байтам в RGB. Довольно любопытные картинки получались, видно закономерности, паттерны, например разные части файла (области данных, области кода).
Когда визуализировал бинарник explorer.exe из XP немного офигел, т.к. увидел там картинку. Оказалось что в нем были BMP картинки встроены, но сначала испугался.
fedor1210
А этого визуализатора у вас не осталось?
Incidence
binwalk что-то похожее делает
tmin10
На самом деле в коде ничего сложного и интересного нет: файл читается побайтно, потом эти байты переводятся в биты, если надо или байту выбирается цвет пиксела и потом пикселы рисуются. У меня было 3 варианта рисовки: квадрат построчно, квадрат спиралькой из центра и прямоугольник. Сам код написан на php.
P.S. Если статья визуализации числа пи прошла песочницу, то может и мне стоит написать статью про визуализацию бинарников и получить-таки инвайт…
ankh1989
Есть подозрение, что можно даже сделать в виде конвертора в .bmp и тогда не надо делать рисовалку — можно в пейнте открывать.
Mad__Max
Если нужен — то стоит. Для солидности (и популярности) раз уж код все-равно на PHP, т.е. под серверное окружение рассчитан, то помимо описания как работает и исходного кода и неск. примеров еще сразу и соответствующий сервис поднять хотя бы на время и приложить ссылку в конце статьи — куда можно загрузить бинарник (вообще произвольный файл, разве что максимальный размер стоит ограничить) и получить картинку-визуализацию.
tmin10
Я подумывал переписать код на Java, благо он не особо сложный для воспроизведения, тогда каждый сможет сам запустить на любой машине. А то поддержка сервера для 1-2 тысячи юзеров в один день с не самым оптимальным алгоритмом (а картинку мой алгоритм строил около 1-2 секунды для небольших файлов) будет непростой задачей само по себе.
Mad__Max
Не думаю что туда тысячами ходить будут. Всего тысяч 5-10 прочитает статью за несколько первых дней, лишь несколько сотен из них захотят сами попробовать не удовлетворившись готовыми примерами.
Потом через несколько дней быстро спадет интерес и нагрузка.
tmin10
Вот как раз самое главное пережить этот 1 день, чтобы оно нормально работало.
algrizik
Можно воочию увидеть почерк разработчика?
А если идею трактовать расширительно, то, почему разработчика? А писателя, поэта. политика, композитора, вообще любого, кто придает мысли символьный вид? Очень интересно!
А вот что увидели встроенную в код картинку удивляет непомерно — это же надо чтобы совпали или оказались кратными форматы растров. Иначе размажется по разным строкам и даже не заподозришь ее присутствие.
AVX
Напомнило «снег» в телевизоре в процессе настройки. Только что-то в голове всплывает чёрно-белый такой снег, среди этого шума можно было много чего увидеть и даже услышать. Даёшь визуализацию пи в видео! Миллион пикселей на кадр, 10 кадров в секунду, ну и хотя бы 10 секунд — 100 миллионов пикселей. Зато лозунг какой! «увидеть 100 миллионов цифр числа пи!»
Только бы ютуб не забанил, а то мало ли чего ему там покажется — вдруг авторские права нарушает.
kAIST
Это называется «белый шум», можете одноименный фильм на эту тему посмотреть )
Denai
Всегда удивлялся выбору формата файла для таких вещей. Отмечу что у ализара он тот же.
olgerdovich
позволю себе немного позанудствовать.
По-моему, наиболее емкое изображение числа «пи» — это окружность с проведенным в ней диаметром и вариации этой темы (например полуокружность и радиус), т. е. изображение двух линий, отношение длин которых в точности равно «пи». Можно сыграть на этой теме иначе, эксплуатируя, например, ряд Лейбница, ряд обратных квадратов (во втором случае наглядными будут не длины, а площади) или еще какие-то источники, явно связанные с числом «пи» и при этом позволяющие отобразить единицу.
То, что изображаете вы — это визуализация десятичной записи числа «пи».
Конечно, ваш заголовок совершенно уместен, поскольку в обыденной жизни мы почти всегда ассоциируем число с его десятичной записью, но механизм визуализации апеллирует к записи числа, при этом в десятичной системе возникает вопрос засовывания тысячи в 256 («Поскольку максимальное значение трехзначного десятичного числа 999, а восьмизначного двоичного 255, произведем масштабирование к диапазону 0 — 255.»), Не уместно ли поиграться с основаниями системы счисления? может, стоит перевести число «пи» в восьмеричную систему, чтобы не было этой проблемы? как будет меняться картинка для других систем счисления?
Понятно, что самый общий ответ — по существу, никак при достаточно малом масштабе, да и вообще изображение будет неотличимо от белого шума (английская википедия пишет, что «The digits of ? have no apparent pattern and have passed tests for statistical randomness, including tests for normality», в русской такого пассажа не нашлось, только утверждение про отсутствие строгого доказательства или опровержения нормальности числа ?, так что прошу извинить за цитату на английском), но на такую тему можно было бы хотя бы задуматься.
edd_k
Почему в jpg, а не в png?
P.S.: Я бы выбрал какую-то менее «рябую» палитру. Например, от желтого к красному. Авось и правда Мона Лиза получилась бы!
uterr
Было бы интересно перевести число в картинку и таки увидеть какую-то закономерность, не уверен, возможно ли это :)
А так, похоже что точно такой же результат даст построение цветового поля из случайных чисел. Забавное было бы сравнение — картинка из числа пи, из аппаратных случайных чисел, из ГСПЧ
olgerdovich
хотя отсутствие закономерности в распределении цифр в записи числа «пи» строго пока не доказано и не опровергнуто, на текущий момент никакой закономерности не обнаружено и, скорее всего, обнаружено никогда не будет. Во всяком случае, для записи «пи» с известной сейчас точностью картинка не будет визуально отличима от полученной с помощью ГСЧ.
MnogoBukv
Я такие картинки ещё на спектруме PLOT'ом рисовал в рандоме. Один в один.
Ares_ekb
А почему бы не сделать криптовалюту на основе вычисления числа пи или ещё чего-то полезного?
IgorKh
А вот что про эту картинку говорят современные «ИИ» )
1 CaptionBot — «I am not really confident, but I think it's a close up of a tennis court.»
2 WolfAI — умудрился разглядеть в ней целую животинку mammal
3 Imagga — лучше всех выкрутилась, сказала что это текстура(45.75%) или паттерн(30.77%)
IgorKh
ЗЫ: еще добавлю Ватсона, а то на момент написания он был в офлайне
4 Watson — разглядел flower(43%), дальше идут pattern(38%) и texture(35%)
0x9d8e
На рандом похоже. Когда-то в юности делал такую ерунду: генерировал случайную картинку 100*100px, а затем случайно её модифицировал. Обе отображались пользователю, пользователь мог выбрать какая из них более «осмысленная». Следующие изменения вносились уже в неё. Таким образом просидев пару часов над этим чудом инженерной мысли можно было получить что-нибудь среди этого шума. У меня получилась иконка щита и звёздочка (естественно на фоне аналогичном тому, что в посте). Ну и по ценности сие примерно равнозначно на мой взгляд (то есть интересно было сделать самому, но пользы ноль).
tmin10
Надо было нейронку прикрутить, обученную на чём-либо заранее и чтобы оно говорило, что больше похоже. Хотя, возможно в итоге просто получится усреднённая картина того, на чём её обучали…
Mad__Max
Скорее всего. Причем кто-то (вроде Гугл) уже подобные эксперименты проводил. Сетям обученным на распознавание картинок на вход вместо осмысленных изображений скармливали чистый шум (Гауссов кажется) и смотрели на результаты и извлекали информацию из промежуточных слоев сети.
Часть картинок напоминающих «кислотные глюки» за авторством нейросетей так и создана.