CNN TürkUKMTO: Hürmüz Boğazı'nda bir gemide yangın çıktıPunchMorning recap: Adebutu, Gwarzo gov’ship ambitions in limbo, Toluwanisings’ children get scholarship, other top storiesThe Jerusalem PostIRGC intercepts, averts 'hostile fighter jet' over Qeshm Island, according to local reportsESPNJosh Jacobs scores twice as Packers dispatch PanthersInquirerDipolog City suspends classes for kindergarten, elementary due to rainsBollywood HungamaSiddharth Anand drops another cryptic post about Shah Rukh Khan starrer King at midnight; is a birthday surprise coming?한겨레“사람에게 가장 필요한 것은 사람” 강조한 배우…연기로, 삶으로 이웃 품은 최불암Complete SportsOsimhen Welcomes Second Child With PartnerUOLComo as capas dos livros de terror revelam os medos coletivos de cada épocaSoompiJo Aram Sustains Injury While Filming Upcoming Action Drama + To Sit Out 2026 KGMA As PresenterZDF heuteEntdecken Sie das ZDF-NachrichtenstudioObservador DesportoAs notícias das 7h
The Daily Newsstand · Free, Always
Friday, October 30, 2026

Глобус в терминале: Земля из символов Брайля и реальная смена дня и ночи

Translate

Представьте, что в уголке вашего терминала висит глобус Земли, и ночь на нём наступает там же, где за окном. Я написал такую программу за два дня. Она загружает карту мира, обтягивает ею сферу и отображает её символами: точками шрифта Брайля, значками Юникода либо буквами. Шар вращается мышью и раскрашивается одной из десяти палитр. Помимо Земли утилита показывает Солнце, Луну, все планеты и Цереру. Практической ценности у неё нет.

Земля крутится в терминале

Земля крутится в терминале

С чего всё началось

Однажды мне попался в pinterest прикольный пост: Земля, сложенная из букв, в окружении тонкого кольца, с редкими звёздами вокруг. Захотелось сделать такую же картинку в терминале. Я подумал: пусть сфера вращается, а материки сохраняют собственный цвет. В результате программа может воссоздать и исходный постер.

Постер, с которого всё началось

Постер, с которого всё началось

Установка

Для работы достаточно терминала, умеющего выводить цвета. Внутри сборки уже находятся интерпретатор Python, библиотека NumPy и карты всех тел. Установка состоит из одной команды:

curl -fsSL https://raw.githubusercontent.com/pluttan/ascii-earth/main/install.sh | sh

Или:

brew install pluttan/tap/ascii-earth

Сборки для Windows пока нет. Я тестировал поведение на macOS и Linux, сеансы внутри tmux и соединения через mosh.

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

ascii-earth -i

Далее глобусом управляют мышью и клавиатурой: перетаскивание вращает сферу, а колёсико меняет масштаб. Клавиша ? выводит перечень всех клавиш, q завершает работу.

Что можно менять

Ниже перечислены клавиши интерактивного режима.

Клавиша

Что делает

< >

предыдущее и следующее тело

стрелки или h j k l

повернуть шар

+ -

приблизить и отдалить

пробел

шар крутится сам

g

вид знаков: Брайль, Юникод, ASCII

p P

следующая и предыдущая палитра

[ ]

меньше и больше насыщенности

, .

темнее и светлее

c

цвет: 24 бита, 256 цветов, без цвета

n

день и ночь по настоящему Солнцу

f

слежение за Солнцем

m

масштаб: fit, sqrt, real

R

кольца планет

s o b

звёзды, обводка диска, подписи

r

вернуть всё как было

Те же параметры можно задать через аргументы командной строки, если требуется сразу получить картинку в определённом виде:

ascii-earth --body saturn --lat 26          # Сатурн, кольца раскрыты
ascii-earth --sun                           # Земля прямо сейчас: день и ночь
ascii-earth --palette catppuccin            # палитра Catppuccin
ascii-earth --scale real --body mars        # Марс в честном размере
ascii-earth --spin                          # шар крутится сам, Ctrl+C для выхода

Раскраска и палитры

Всего десять палитр, и та, что имитирует природные цвета, напоминает атлас: синий океан, зелёные леса, жёлтые пустыни. Палитры играют с цветом: синяя, зелёная, янтарная, ледяная, серая, inferno, неоновая и Catppuccin. Клавиша p циклически меняет палитру прямо во время работы, а [, ], , и . регулируют насыщенность и яркость.

Одна и та же Земля в десяти палитрах

Одна и та же Земля в десяти палитрах

Исходный цвет считывается с реальной карты, после чего палитра его перекрашивает. Палитра Catppuccin заимствует цвета из одноимённой темы. Когда терминал не заявляет о поддержке 24-битного цвета, программа автоматически переключается в режим 256 цветов.

Доступны три набора символов, переключаемых клавишей g, причём по умолчанию используется Брайль, дающий самые плавные очертания. Последовательность из 56 символов Юникода создаёт наиболее пёстрое изображение, а буквы ASCII ближе всего к тому плакату.

Одна и та же часть Земли в трёх видах знаков

Одна и та же часть Земли в трёх видах знаков

Также можно задать подписи сверху и снизу. Если выбрать буквы, синюю палитру и две строки подписей, программа воспроизводит тот самый постер:

ascii-earth --glyphs ascii --palette blue \
    --top "THAT'S NO EARTH!" --bottom "IT'S A SPACE STATION."
Постер, повторённый программой

Постер, повторённый программой

Восемь точек на клетку

Чем символы Брайля превосходят обычные буквы? Обычная буква заполняет клетку одним цветовым пятном, тогда как в Юникоде существует блок из 256 знаков Брайля, каждый из которых содержит восемь точек в сетке 2 на 4. Каждая точка соответствует отдельному биту; символ формируется прибавлением суммы битов активных точек к коду U+2800.

Знак Брайля: восемь точек, каждая задаёт свой бит

Знак Брайля: восемь точек, каждая задаёт свой бит

Одна терминальная клетка превращается в восемь пикселей. Цвет у клетки остаётся одним, но граница диска и береговые линии получаются сглаженными. Решение о том, какие точки активировать, принимает упорядоченное размытие по матрице Байера 4×4: в светлых областях зажигается больше точек, в тёмных меньше.

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

День и ночь по реальному Солнцу

Клавиша n активирует реальный терминатор дня и ночи. Программа вычисляет подсолнечную точку, то есть место, где Солнце находится в зените. Широта определяется днём года, а долгота временем по UTC: каждый час Солнце сдвигается на 15 градусов к западу. Ночная сторона отображается в чёрно-белой гамме, причём море делается темнее суши, чтобы очертания берегов оставались различимыми. Погрешность составляет пару градусов, для визуализации этого достаточно.

Конец октября, 16:00 UTC: над Европой вечер, над Азией ночь

Конец октября, 16:00 UTC: над Европой вечер, над Азией ночь

Клавиша f включает режим отслеживания Солнца. Центр диска совмещается с подсолнечной точкой, так что видимой остаётся лишь дневная сторона. Земля вращается под Солнцем с реальной скоростью, один оборот в сутки. Кадр обновляется ежесекундно, и такой глобус удобно размещать в узкой панели tmux:

ascii-earth --follow

Солнце, Луна и планеты

Клавиши < и > циклически переключают 11 небесных тел: Солнце, восемь планет, Луну и Цереру. Карту Земли я загрузил из NASA Blue Marble, а остальные из Solar System Scope под лицензией CC BY 4.0.

Сатурн и Уран обладают кольцами, причём передняя дуга рисуется поверх сферы, а задняя скрывается за ней. В кольце Сатурна заметна тёмная щель, напоминающая деление Кассини. Однородное кольцо при вращении казалось бы статичным, поэтому в кольцо внесены неравномерные сгустки.

Сатурн и Уран с кольцами

Сатурн и Уран с кольцами

Клавиша m переключает масштаб, и в режиме fit каждое тело полностью занимает экран. Режим real сохраняет реальные пропорции: Солнце в 109 раз больше Земли и заполняет экран сплошной стеной, тогда как Церера видна крохотным кружком. Режим sqrt извлекает квадратный корень из отношения радиусов. При таком масштабе Солнце превосходит Землю примерно в 10 раз, и при переключении тел наглядно видно соотношение размеров. Колёсико мыши в этих режимах масштабирует все тела синхронно.

Все тела в режиме sqrt, по кадру программы на каждое

Все тела в режиме sqrt, по кадру программы на каждое

Что получилось

У меня вышел скрипт на Python, умещающийся в одном файле объёмом примерно в тысячу строк. Он отображает 11 небесных тел, используя три набора символов и десять цветовых схем, определяет, где сейчас день, а где ночь, и работает полностью офлайн. Код открыт под лицензией MIT: https://github.com/pluttan/ascii-earth.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.