Тема не нова, достаточно набрать в поиске «графическое изображение Пи», чтобы убедиться в этом.

А вот публикация на эту тему на этом ресурсе. Для отображения цифр здесь используется условный цвет, при этом кодировка предельно простая — палитра 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 отказывается создавать контуры, и еще много интересного, посмотрите сами.
Поделиться с друзьями
-->

Комментарии (41)


  1. myxo
    01.07.2016 21:21
    +4

    То есть это ни о чем не говорящая визуализация любого иррационального числа?


    1. splatt
      02.07.2016 03:15
      +10

      Я слышал, что если очень долго двигать начальную точку, где-то между нулем и бесконечностью можно наткнуться на портрет Моны-Лизы.

      Пруф
      image


      1. IgorKh
        04.07.2016 14:02

        я встречал идею, что поскольку число ПИ иррациональное то любую информацию любого объема можно закодировать смещением ее в десятичном представлении этого числа. Помню в студенческие годы даже на реализацию такого архиватора натыкался.
        В оправдание стоит сказать что было еще доказательство того, что в общем случае такое смещение будет длиннее самой информации )


        1. ankh1989
          06.07.2016 04:35

          С чего вы взяли, что это возможно?


    1. algrizik
      05.07.2016 13:18

      Ну, если Пи — любое, то любого!


  1. Sadler
    01.07.2016 21:34
    +12

    Все мы когда-то были детьми, все мы писали свой первый «Hello World». Если по гамбургскому счёту, то новизны нет, практической значимости нет, интересной методики нет, сложность работы нулевая, но если это Ваша первая в жизни публикация, то у Вас ещё всё впереди.


    1. algrizik
      05.07.2016 13:19

      Не спорю ни с одним Вашим тезисом.


  1. Arcanum7
    01.07.2016 21:35

    Почему то вспомнился тест Роршаха — всякая фигня начала мерещиться.


    1. unxed
      01.07.2016 23:16
      +2

      Наш мозг вообще склонен к ложным срабатываниям в области pattern matching.

      Дело в том, что люди, которые принимали странный рельеф за леопарда — выживали, а те, кто принимали леопарда за странный рельеф — умирали.

      Так работает естественный отбор.

      Между прочим, если не спать суток трое, в шуме воды из-под крана отчетливо слышится человеческая речь. И визуальное восприятие примерно такие же фокусы показывает.


      1. DrPass
        02.07.2016 02:01
        +1

        > Дело в том, что люди, которые принимали странный рельеф за леопарда — выживали,
        > а те, кто принимали леопарда за странный рельеф — умирали
        Там на самом деле на выживаемость больше влияло то, с какой стороны дул ветер, со стороны людей или леопарда, и был леопард сытый или голодный :)


    1. algrizik
      05.07.2016 13:20

      А я напрягался, напрягался, так ничего и не увидел.


      1. Mad__Max
        06.07.2016 00:57

        Я только что-то напоминающее галактические филаменты (крупномасштабную структуру вселенной) «увидел».


  1. GeMir
    01.07.2016 22:10
    +3

    А ещё можно выложить числа-пикселы по спирали Улама и начать искать несуществующие закономерности…


    1. algrizik
      05.07.2016 13:38

      Непонятно как это устроить. В скатерти Улама числовая ось скручена спиралью вокруг нулевой точки и на ней отмечены особые (у Улама — простые) числа. Если размещать непосредственно n-значные числа из последовательности знаков Пи они займут область ограниченную 10 в степени n и ничего интересного не предвидится.


      1. GeMir
        05.07.2016 15:42

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


        1. algrizik
          05.07.2016 15:56

          Согласен с оценкой «уровня „интересности в обоих случаях. Просто другой способ построения растра, возможно попробую если вдруг что интересное откроется донесу.


          1. GeMir
            05.07.2016 16:05

            Спираль Улама 100?100, ноль в центре, простые числа красные: http://georgmierau.de/ulam_100x100.png
            Скрипт на Snap.svg выкладывать не буду — очень уж далёк от того, что можно считать хорошим кодом.


  1. tmin10
    01.07.2016 22:20
    +3

    В своё время, под впечатлением доклада на конференции MS SD con, написал визуализатор бинарных файлов. Сначала просто по битам, в ч/б, потом по байтам в RGB. Довольно любопытные картинки получались, видно закономерности, паттерны, например разные части файла (области данных, области кода).
    Когда визуализировал бинарник explorer.exe из XP немного офигел, т.к. увидел там картинку. Оказалось что в нем были BMP картинки встроены, но сначала испугался.


    1. fedor1210
      01.07.2016 22:54
      -1

      А этого визуализатора у вас не осталось?


      1. Incidence
        01.07.2016 23:05

        binwalk что-то похожее делает


      1. tmin10
        02.07.2016 10:07
        +3

        На самом деле в коде ничего сложного и интересного нет: файл читается побайтно, потом эти байты переводятся в биты, если надо или байту выбирается цвет пиксела и потом пикселы рисуются. У меня было 3 варианта рисовки: квадрат построчно, квадрат спиралькой из центра и прямоугольник. Сам код написан на php.

        P.S. Если статья визуализации числа пи прошла песочницу, то может и мне стоит написать статью про визуализацию бинарников и получить-таки инвайт…


        1. ankh1989
          02.07.2016 22:34

          Есть подозрение, что можно даже сделать в виде конвертора в .bmp и тогда не надо делать рисовалку — можно в пейнте открывать.


        1. Mad__Max
          03.07.2016 04:23

          Если нужен — то стоит. Для солидности (и популярности) раз уж код все-равно на PHP, т.е. под серверное окружение рассчитан, то помимо описания как работает и исходного кода и неск. примеров еще сразу и соответствующий сервис поднять хотя бы на время и приложить ссылку в конце статьи — куда можно загрузить бинарник (вообще произвольный файл, разве что максимальный размер стоит ограничить) и получить картинку-визуализацию.


          1. tmin10
            03.07.2016 11:21

            Я подумывал переписать код на Java, благо он не особо сложный для воспроизведения, тогда каждый сможет сам запустить на любой машине. А то поддержка сервера для 1-2 тысячи юзеров в один день с не самым оптимальным алгоритмом (а картинку мой алгоритм строил около 1-2 секунды для небольших файлов) будет непростой задачей само по себе.


            1. Mad__Max
              03.07.2016 18:48

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


              1. tmin10
                05.07.2016 12:16

                Вот как раз самое главное пережить этот 1 день, чтобы оно нормально работало.


    1. algrizik
      05.07.2016 13:50

      Можно воочию увидеть почерк разработчика?
      А если идею трактовать расширительно, то, почему разработчика? А писателя, поэта. политика, композитора, вообще любого, кто придает мысли символьный вид? Очень интересно!

      А вот что увидели встроенную в код картинку удивляет непомерно — это же надо чтобы совпали или оказались кратными форматы растров. Иначе размажется по разным строкам и даже не заподозришь ее присутствие.


  1. AVX
    01.07.2016 22:24
    +2

    Напомнило «снег» в телевизоре в процессе настройки. Только что-то в голове всплывает чёрно-белый такой снег, среди этого шума можно было много чего увидеть и даже услышать. Даёшь визуализацию пи в видео! Миллион пикселей на кадр, 10 кадров в секунду, ну и хотя бы 10 секунд — 100 миллионов пикселей. Зато лозунг какой! «увидеть 100 миллионов цифр числа пи!»
    Только бы ютуб не забанил, а то мало ли чего ему там покажется — вдруг авторские права нарушает.


    1. kAIST
      01.07.2016 22:38
      +2

      Напомнило «снег» в телевизоре в процессе настройки. Только что-то в голове всплывает чёрно-белый такой снег, среди этого шума можно было много чего увидеть и даже услышать.

      Это называется «белый шум», можете одноименный фильм на эту тему посмотреть )


  1. Denai
    02.07.2016 00:45
    +4

    Всегда удивлялся выбору формата файла для таких вещей. Отмечу что у ализара он тот же.


  1. olgerdovich
    02.07.2016 01:37
    +2

    позволю себе немного позанудствовать.

    По-моему, наиболее емкое изображение числа «пи» — это окружность с проведенным в ней диаметром и вариации этой темы (например полуокружность и радиус), т. е. изображение двух линий, отношение длин которых в точности равно «пи». Можно сыграть на этой теме иначе, эксплуатируя, например, ряд Лейбница, ряд обратных квадратов (во втором случае наглядными будут не длины, а площади) или еще какие-то источники, явно связанные с числом «пи» и при этом позволяющие отобразить единицу.

    То, что изображаете вы — это визуализация десятичной записи числа «пи».

    Конечно, ваш заголовок совершенно уместен, поскольку в обыденной жизни мы почти всегда ассоциируем число с его десятичной записью, но механизм визуализации апеллирует к записи числа, при этом в десятичной системе возникает вопрос засовывания тысячи в 256 («Поскольку максимальное значение трехзначного десятичного числа 999, а восьмизначного двоичного 255, произведем масштабирование к диапазону 0 — 255.»), Не уместно ли поиграться с основаниями системы счисления? может, стоит перевести число «пи» в восьмеричную систему, чтобы не было этой проблемы? как будет меняться картинка для других систем счисления?

    Понятно, что самый общий ответ — по существу, никак при достаточно малом масштабе, да и вообще изображение будет неотличимо от белого шума (английская википедия пишет, что «The digits of ? have no apparent pattern and have passed tests for statistical randomness, including tests for normality», в русской такого пассажа не нашлось, только утверждение про отсутствие строгого доказательства или опровержения нормальности числа ?, так что прошу извинить за цитату на английском), но на такую тему можно было бы хотя бы задуматься.


  1. edd_k
    02.07.2016 06:58
    +2

    Почему в jpg, а не в png?

    P.S.: Я бы выбрал какую-то менее «рябую» палитру. Например, от желтого к красному. Авось и правда Мона Лиза получилась бы!


  1. uterr
    02.07.2016 09:58

    Было бы интересно перевести число в картинку и таки увидеть какую-то закономерность, не уверен, возможно ли это :)
    А так, похоже что точно такой же результат даст построение цветового поля из случайных чисел. Забавное было бы сравнение — картинка из числа пи, из аппаратных случайных чисел, из ГСПЧ


    1. olgerdovich
      02.07.2016 13:19

      хотя отсутствие закономерности в распределении цифр в записи числа «пи» строго пока не доказано и не опровергнуто, на текущий момент никакой закономерности не обнаружено и, скорее всего, обнаружено никогда не будет. Во всяком случае, для записи «пи» с известной сейчас точностью картинка не будет визуально отличима от полученной с помощью ГСЧ.


  1. MnogoBukv
    02.07.2016 11:24
    +5

    Я такие картинки ещё на спектруме PLOT'ом рисовал в рандоме. Один в один.


  1. Ares_ekb
    04.07.2016 13:45

    А почему бы не сделать криптовалюту на основе вычисления числа пи или ещё чего-то полезного?


  1. IgorKh
    04.07.2016 13:46
    +1

    А вот что про эту картинку говорят современные «ИИ» )

    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%)


    1. IgorKh
      04.07.2016 13:50

      ЗЫ: еще добавлю Ватсона, а то на момент написания он был в офлайне

      4 Watson — разглядел flower(43%), дальше идут pattern(38%) и texture(35%)


  1. 0x9d8e
    04.07.2016 17:33

    На рандом похоже. Когда-то в юности делал такую ерунду: генерировал случайную картинку 100*100px, а затем случайно её модифицировал. Обе отображались пользователю, пользователь мог выбрать какая из них более «осмысленная». Следующие изменения вносились уже в неё. Таким образом просидев пару часов над этим чудом инженерной мысли можно было получить что-нибудь среди этого шума. У меня получилась иконка щита и звёздочка (естественно на фоне аналогичном тому, что в посте). Ну и по ценности сие примерно равнозначно на мой взгляд (то есть интересно было сделать самому, но пользы ноль).


    1. tmin10
      05.07.2016 12:41

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


      1. Mad__Max
        06.07.2016 01:03

        Скорее всего. Причем кто-то (вроде Гугл) уже подобные эксперименты проводил. Сетям обученным на распознавание картинок на вход вместо осмысленных изображений скармливали чистый шум (Гауссов кажется) и смотрели на результаты и извлекали информацию из промежуточных слоев сети.
        Часть картинок напоминающих «кислотные глюки» за авторством нейросетей так и создана.