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