А будут Р-2А и Р-5А( не путать с растворителем). Это по прежнему исследовательские геофизические ракеты. Хоть и двойного назначения, но в армейку они так же как и Р-1 не пошли, за исключением Р-5.
Начнём с Р-2 (по ГРАУ 8Ж38) Наконец-то пошли кардинальные изменения по сравнению с родоначальником Р-1 - ФАУ-2.
Башка, т.е. полезная нагрузка теперь стала отделяемой, топливный бак(тот же самый, любимый нами этанол) из люминиевых сплавов стал несущим, что снизило сухую массу ракетоносителя, а вот бак окислителя(кислород) - подвесным.
Движок так же Валентин Петрович нехило так модернизировал: раскочегарил турбину, заменил разбодяженный немецкий шнапсик в 72% более качественным отечественным, в 92 оборота. Новое двигло получило новую пневмогидравлику, парогазогенератор на твёрдом каталике. В результате вес двигла снизился в 1.4 раза, а тяга у земли выросла с 26 до 37(сорри, но ссылка тока по VPN или табличка без VPN) тонн-сил, а давление в камере возрасло с 16.22 до 21.62 кило на см². Вот так начала наконец-то зарождаться отечественная наука двигателестроения в космосе (не стоит забывать и о немецких "мозгах", которые мы смогли "утащить" по результатам освобождения Польши). Новое двигло стало именоваться РД-101 (по ГРАУ 8Д52), которая и до сих пор нехило так держится (заказчики, правда, разбежались из-за санкций).
А вот и Пальма с Кусачкой (о них в следующем посте) селфятся на фоне Р-2А
Итого у базовой Р-2 полезная нагрузка с одной тонны возрасла до полутора, а дальность с 270 км аж до 600 км по баллистической траектории (воякам этого было мало).
А что же ждало собачек с новой ракетой? Естественно новые "горизонты". Возросшая полезная нагрузка позволила насытить ракету науч. приборами (это, вне этой серии постов, ибо обьять необъятное сложно), так же продолжилась работа по выяснению "живучести" бродячих собачек и доработка САС.
На третьем этапе так же использовалась и Р-5А, что на базе Р-5М(по ГРАУ 8А62М). Была попытка создать Р-3 (по ГРАУ 8А67), но оказалась "не в тему". На Р-5 уже кислородный бак сделан так же как и "спиртобаза" на Р-2 - несущим. Двигло г-н Глушко так же перелопатил, РД-110 (по ГРАУ 8Д55) под керосин, видать понял, что народ спивается на "спиртовых" двиглах (там же учёт на тонны идёт). И хоть масса двигла возросла с 888 кг (РД-101) до 1800, но остальные параметры - это прям прорыв: тяга у земли с 37 до 120 т.с., давление в камере сгорания с 21,62 до 60 кило на см²...
Теперь дальность модернизированной под вояк Р-5М с полезной нагрузкой в 1350 кг составила уже 1200 км, что вполне их устроило, и на вооружение было поставлено 36 ракет с ядрёной БЧ(одна штука) в 300 килотонн.
Но космопрограмма этим не заканчивалась, Прокачанное двигло могло вывести на высоту в вертикальном полёте полезную нагрузку на высоту 400-500 км. Чем, Сергей Павлович естественно воспользовался. Помимо различных исследований в ход пошли и наши любимые собачки.
Теперь уже Пёстрая фоткается на фоне той "бОшки", что доставила её обратно на землю (теплозащита? - не не ведаем пока)
Ну а про собачек персонально на третьем этапе - в следующий раз.
Здравствуйте мои дорогие мальчишечки и девчоночки! Сегодня мы с вами окунемся в увлекательный мир математики (да и не только ее мы тут затронем). Но не той, где синусы и интегралы заставляют плакать гуманитариев, а в ту, которую природа встроила по умолчанию в крошечные мозги насекомых. Какой-нибудь муравей или пчела на автомате решает сложнейшие задачи, и делает это так, что ученые такие: «А так можно было?» Так что наливайте чайку, берите печеньки, и погнали разбираться, как шестиногие ребята уделывают нас в естественных науках.
Кстати, вы также можете подписаться на меня в телеге: Дичь в Природе А еще, можете поддержать мое творчество.
Эволюция - лучший учитель Для начала, главный вопрос: "нафига"? Зачем насекомому, у которого в голове нейронов меньше, чем у вас подписчиков, вообще нужна математика? Ответ простой, как сатиновые трусы: выживание. Природа - это не уютный офис с кулером и соцпакетом, а жестокий рынок, где за ресурсы идёт постоянная война. Еда, безопасность, размножение - всё это требует быть эффективным. А эффективность - это и есть математика в чистом виде. Экономия энергии: Пролететь лишний метр? Пройти лишний сантиметр? Для крошечного организма это может стоить жизни. Нужно найти самый короткий путь. Максимизация добычи: Как обойти все цветы на поляне, собрав максимум нектара и потратив минимум сил? Строительство: Как построить прочное и вместительное жилище из минимума материала? Навигация: Как вернуться домой, если тебя унесло ветром на километр? Эволюция миллионы лет отсеивала тех, кто «считал» плохо. Муравей, который блуждал и не мог найти кратчайший путь к муравейнику, - мёртвый муравей. Пчела, которая неэффективно строила соты, - мёртвая колония. Выживали только те, в чью «прошивку» были заложены оптимальные математические алгоритмы, и это не сознательный выбор, это инстинкт, отточенный до совершенства. Вот тут мы подходим к конкретным примерам, от которых мозг немного скрипит и заставляя уважать даже обычную муху (да, дальше может быть немного сложно. Напрягаемся).
Примеры из жизни шестиногих Пример №1. Пчелы и их гексагональная магия Это классика, о которой слышали многие, но не все вникали в суть. Почему пчелиные соты - это идеальные шестиугольники (гексагоны), а не квадраты или треугольники? Сейчас все разберем, не напрягайтесь. Представьте, что вы пчела-прораб (ну так вышло). У вас есть задача: построить максимально вместительное хранилище для мёда, используя при этом как можно меньше воска. Воск - это ценный ресурс, на его производство уходит куча энергии (читай: съеденного мёда), то есть, нужно найти такую форму ячейки, которая при минимальной длине стенок (периметре) даст максимальную площадь. Математики называют это «задачей о замощении плоскости». Если мы хотим замостить плоскость одинаковыми фигурами без зазоров, у нас есть только три варианта: треугольники, квадраты и шестиугольники. Треугольники? Неплохо, но много стенок на единицу площади. Неэкономно. Квадраты? Уже лучше, чем треугольники. Периметр меньше при той же площади. Но можно ещё лучше. Шестиугольники? Идеально. Из всех фигур, которыми можно замостить плоскость без пробелов, именно правильный шестиугольник имеет наименьший периметр при заданной площади. Пчёлы, не имея калькуляторов и учебников по геометрии, инстинктивно «вычислили» это миллионы лет назад. Они строят идеальные гексагоны, экономя до 20-30% воска по сравнению с квадратными ячейками. Это чистая оптимизация, за которую любой логистической компании выписали бы премию. Причем угол, под которым сходятся стенки ячеек, равен ровно 120 градусам. Это обеспечивает максимальную прочность конструкции. Пчелы - прирожденные инженеры.
Пример №2. Муравьи и задача коммивояжера Как говорится: дальше - больше. Знакомьтесь, «задача коммивояжера» - одна из самых известных задач в теории графов и оптимизации. Суть задачи: есть несколько городов (точек), которые нужно посетить. Как проложить маршрут, чтобы побывать в каждом городе ровно один раз и вернуться в начало, пройдя при этом наименьшее расстояние? Казалось бы, чего сложного, но если городов становится больше 10-15, количество возможных маршрутов растёт в геометрической прогрессии. Даже для современных суперкомпьютеров нахождение абсолютно идеального решения для большого числа точек - задача очень сложная, но посмотрим на муравьёв. Когда муравей-разведчик находит источник пищи, он возвращается в муравейник, оставляя за собой феромонный след. Другие муравьи чуют этот след и бегут по нему к еде, но фишка вот в чём: сначала они бегут хаотично, разными путями, но чем короче путь, тем быстрее муравей сбегает туда-обратно и обновит след, и чем чаще след обновляется, тем он сильнее пахнет. Получается система с положительной обратной связью:
1. Сначала есть много разных тропинок. 2. Самая короткая тропинка используется чаще всего. 3. На ней концентрация феромонов становится самой высокой. 4. Новые муравьи с большей вероятностью выбирают самый пахучий (то есть самый короткий) маршрут. 5. Через некоторое время почти вся колонна марширует по оптимальному, самому короткому пути. Это называется «муравьиный алгоритм». Он настолько крут, что люди взяли его на вооружение для решения реальных логистических задач: маршрутизация в телекоммуникационных сетях, логистика доставки товаров, да много где ещё. Муравьи, сами того не зная, создали один из самых элегантных эвристических алгоритмов оптимизации. Они не находят гарантированно идеальное решение, как суперкомпьютер, но находят достаточно хорошее решение за невероятно короткое время, а для выживания этого более чем достаточно.
Пример №3. Цикады и простые числа Вот эти ребята прямо очень крутые. Есть такие цикады в Северной Америке, род Magicicada. Их жизненный цикл - это долгий путь, который при этом четко выверен в долгосрочной перспективе. Они проводят под землёй в виде личинок 13 или 17 лет. Не 12, не 15, не 18. А именно 13 или 17. Это простые числа, которые делятся без остатка только на себя и на единицу, но зачем цикаде знать теорию чисел? А это, ребятули, гениальная стратегия выживания, основанная на чистой математике. У хищников, которые питаются цикадами, тоже есть свои циклы популяционных взлётов и падений. Допустим, у какого-то хищника пик численности каждые 4 года, или 5 лет, например, а теперь пошли считать: Если бы цикады вылезали каждые 12 лет, они бы регулярно попадали на пир к этому хищнику (12 делится на 4). Каждую третью встречу хищник был бы на пике формы. Если бы цикады вылезали каждые 15 лет, они бы пересекались с хищником, чей цикл 3 или 5 лет. А вот если твой цикл – 13 лет? Хищник с 4-летним циклом встретится с тобой только раз в 4 * 13 = 52 года, а хищник с 5-летним циклом – раз в 5 * 13 = 65 лет. Шансы на совпадение пиков численности хищника и появления цикад на поверхности резко снижаются. Использование простых чисел в жизненном цикле минимизирует вероятность совпадения с циклами хищников, которые, как правило, имеют более короткие и составные циклы (2, 3, 4, 5, 6, 8, 9, 10, 12 лет). Это как если бы вы играли в лотерею, где выигрышный номер - простое число, на которое вы поставили, а все остальные игроки ставят на составные, и шансы на то, что никто кроме вас не угадает номер, значительно выше. Это не просто адаптация, это эволюционная стратегия, основанная на глубоком понимании (пусть и неосознанном) теории чисел. Цикады - живое доказательство того, что математика - это не только абстрактные формулы, но и мощнейший инструмент выживания.
Пример №4. Пчелы. Навигация и "танец виляния" Вернемся к пчелам, ведь они не только строят идеальные соты, но и являются виртуозными навигаторами и коммуникаторами. Когда пчела-разведчик находит новый источник нектара, она возвращается в улей и исполняет знаменитый "танец виляния". Однако это не просто пляски, а сложнейшая система передачи информации, которую можно описать с помощью векторной алгебры. Танец состоит из двух основных элементов: Направление виляния. Пчела виляет брюшком, двигаясь по прямой линии. Угол этой линии относительно вертикали (на соте) указывает направление к источнику пищи относительно солнца. Если пчела виляет прямо вверх, это означает, что еда находится прямо по направлению к солнцу. Если под углом 30 градусов вправо от вертикали, то еда находится на 30 градусов вправо от солнца. Это чистая тригонометрия и угловые измерения. Длительность виляния. Чем дольше пчела виляет брюшком на прямой линии, тем дальше находится источник пищи, а это прямо пропорциональная зависимость, своего рода "шкала расстояний". Другие пчелы, наблюдая за танцем и считывают эту информацию. Они не просто копируют движения, они интерпретируют их: зная где находится солнце (даже в пасмурную погоду, благодаря поляризованному свету), и, используя угол танца, вычисляют точное направление полета. Длительность виляния дает им представление о том, сколько энергии нужно потратить на полет. Это не просто "покажи, куда лететь", а передача вектора - величины, имеющей и направление, и длину. Пчелы, по сути, обмениваются векторными координатами, позволяя всей колонии эффективно эксплуатировать найденные ресурсы. Это сложнее, чем GPS-навигатор, потому что они используют динамическую систему отсчета: положение солнца, которое постоянно меняется (а у нас некоторые по карте в телефоне не могут понять куда идти).
Пример №5. Пауки и их сети. Геометрия и оптимизация материалов Да, я знаю, что пауки - не насекомые, а паукообразные, но их инженерные способности настолько впечатляют, что мы не станем проходить мимо. Паутина - это не просто липкая ловушка, это шедевр инженерной мысли, где каждый элемент рассчитан с математической точностью. Представьте себе задачу: создать максимально прочную и эффективную ловушку, используя минимальное количество материала (паутины), которая при этом будет устойчива к ветру, дождю и конвульсиям добычи. Пауки-кругопряды строят свои знаменитые радиальные сети, в основе которых лежит идеальная геометрия. Радиальные нити. Они расходятся от центра, как спицы у колеса или зонтика. Их функция - структурная прочность, ведь они должны быть максимально натянуты и равномерно распределять нагрузку. Углы между ними почти одинаковые, что обеспечивает равномерное распределение напряжения. Спиральные нити. Они наматываются по спирали от центра к краям, пересекая радиальные нити. Эти нити обычно липкие и служат для удержания добычи. Расстояние между витками спирали не случайно - оно оптимизировано для захвата насекомых определенного размера, минимизируя при этом расход драгоценного шелка, который, сами понимаете, тоже не с потолка берется. Паук не просто плетёт, а постоянно "чувствует" натяжение каждой нити, регулируя её длину и толщину. Если одна нить ослабевает, он может её подтянуть или укрепить - это динамическая система, которая постоянно оптимизируется. Это как техобслуживание: лучше своевременно реагировать на малейшие изменения, пока они не переросли в серьезные проблемы. Более того, паутина обладает удивительными свойствами: она одновременно прочная и эластичная. Это достигается за счет сложной молекулярной структуры шелка, но и за счет геометрии сети. Радиальные нити обеспечивают жесткость, а спиральные - гибкость, позволяя сети поглощать энергию удара, не разрываясь. Это как если бы вы строили мост, который мог бы выдерживать землетрясения, используя при этом минимальное количество стали. Пауки делают это инстинктивно, применяя принципы, которые люди открыли лишь в XX веке.
Пример №6. Личинки ручейников. Стереометрия и гидродинамика Ручейники - это такие насекомые, чьи личинки живут в воде и строят себе защитные домики из камешков, веточек, песчинок, скрепляя их шелком. И эти домики - не просто случайная куча мусора, а они имеют вполне определенную форму, которая часто является цилиндрической или конической. Почему именно такая форма? Гидродинамика. Цилиндрическая или коническая форма обеспечивает минимальное сопротивление течению воды. Это позволяет личинке тратить меньше энергии на удержание своего домика на месте, особенно в быстрых потоках. Это чистая физика и математика, где форма объекта напрямую влияет на его взаимодействие с жидкостью. Прочность и вес. Личинка выбирает и располагает материалы таким образом, чтобы домик был достаточно тяжелым, чтобы не уносило течением, но при этом не слишком тяжелым, чтобы она могла его перемещать. Это задача на баланс веса и плавучести, а также на прочность конструкции. Защита. Форма домика также оптимизирована для защиты от хищников. Гладкие, обтекаемые поверхности сложнее схватить, а прочная конструкция из камешков обеспечивает прочность. Личинка ручейника, не имея ни малейшего представления о законах Ньютона или уравнениях Навье-Стокса, инстинктивно строит домик, который является оптимальным с точки зрения гидродинамики и механики. Она "знает", как расположить камешки, чтобы создать прочную, обтекаемую и функциональную структуру.
Пример №7. Мухи-дрозофилы и их навигация Даже такие, казалось бы, примитивные существа, как мухи-дрозофилы (те самые, которые любят залетать на кухню и кружить вокруг фруктов), обладают удивительными навигационными способностями, которые можно описать математически. Когда дрозофила летит, она постоянно корректирует свой курс, основываясь на визуальных ориентирах. Исследования показали, что дрозофилы используют сложную систему "оптического потока", и анализируют, как движутся объекты в их поле зрения. Если муха летит прямо, все объекты вокруг нее как бы "разъезжаются" в стороны. Если она поворачивает, объекты в направлении поворота движутся быстрее, а в противоположном - медленнее. Дрозофилы обрабатывают эту информацию, чтобы поддерживать стабильный курс и избегать столкновений. Это можно представить как решение системы дифференциальных уравнений в реальном времени. Мозг мухи постоянно вычисляет вектор движения, сравнивая его с желаемым направлением, и вносит коррективы. Более того, они способны запоминать и воспроизводить сложные траектории полета. Если дрозофила нашла источник пищи, она может вернуться к нему, даже если путь изменился. Это требует не просто следования по феромонному следу, а построения внутренней "карты" и использования алгоритмов поиска пути. По сути - это простейшая форма пространственного мышления, основанная на математических принципах.
Пример №8. Термиты. Архитектура и термодинамика. Термиты - это настоящие мастера строительства, создающие огромные и сложные термитники, которые могут достигать нескольких метров в высоту. Эти сооружения - не просто кучи земли, а высокоэффективные экосистемы, где поддерживается стабильная температура и влажность. Как им это удается? С помощью гениальной архитектуры, основанной на принципах термодинамики и аэродинамики: Вентиляционные шахты. Термитники имеют сложную систему внутренних каналов и шахт, которые обеспечивают циркуляцию воздуха. Теплый воздух, поднимаясь вверх, выводится наружу, а более холодный воздух поступает снизу, что создает естественную конвекцию, поддерживая оптимальную температуру внутри. Терморегуляция. Термиты активно регулируют температуру, строя или разрушая определенные части термитника, а также изменяя влажность. Они могут создавать "камеры" с разной температурой, чтобы личинки развивались в идеальных условиях. Прочность конструкции. Термитники строятся из смеси земли, слюны и экскрементов, которые затвердевают, образуя прочный материал. Форма термитника, часто с широким основанием и сужающейся вершиной, обеспечивает максимальную устойчивость к ветру и другим внешним воздействиям. Термиты, работая как единый сверхорганизм, коллективно решают сложнейшие инженерные задачи. Они "вычисляют" оптимальное расположение вентиляционных отверстий, толщину стен, угол наклона поверхностей, чтобы создать идеальные условия для жизни колонии. Это пример коллективного интеллекта, где каждый индивид выполняет свою функцию, но результат - это сложнейшее математическое и инженерное сооружение.
Почему букашек стоит уважать Итак, что мы имеем в сухом остатке? Эволюция - величайший оптимизатор. Миллионы лет естественного отбора оттачивали эти "математические алгоритмы" до совершенства. Те, кто "считал" плохо, просто не выжили. Математика - это не просто школьный предмет, а фундаментальный язык природы, который насекомые используют для выживания и процветания. От идеальных шестиугольников пчелиных сот до навигационных алгоритмов муравьев и стратегий выживания цикад, эти крошечные существа демонстрируют поразительные математические способности. Их инстинкты, отточенные миллионами лет эволюции, позволяют им решать сложнейшие задачи оптимизации, геометрии и теории чисел. Так что в следующий раз, когда увидите муравья или пчелу, помните: перед вами не просто насекомое, а маленький гений с крылышками, решающий задачи, над которыми ломают головы лучшие умы человечества. Вот такая у нас сегодня получилась объемная и насыщенная статья. Да, в ней нет моих любимых шутеечек, но я решил, что иногда можно и без них обойтись. Надеюсь, что вы смогли дочитать этот текст до конца, что вам было интересно и вы узнали много нового об этих маленьких гениях, которые не оканчивали ВУЗов, но получили свои знания ценой миллионов жизней и десятков тысяч лет проб и ошибок.
Не рекомендуется принимать данную статью близко к сердцу или как истину в последней инстанции. Скорее как научпоп-грелку для мозгов. Тут довольно много упрощений, упущений или просто странно написанных моментов. Если что-то объяснено совсем криво, то добро пожаловать в комментарии.
Все сказанное далее применимо везде, но детали описаны для защищенного режима x86 (только я опустил префиксEдля регистров) и языков семейства C (в основном C и C++, местами C#). Для понимания рекомендуется знать про указатели и базово представлять, что происходит в процессоре.
Приятного чтения.
Думаю все помнят, что такое функция в математике
Начнем со сложного
Глоссарий
Чувствую, что большинство не имеет ни малейшего представления об указателях
В части про x86 я упоминал о том, что процессор представляет из себя бешенный самоуправляемый калькулятор, которому указом может быть разве что хранилище кода, аппаратный сброс и немаскируемое прерывание. И что у него есть системная шина, состоящая из шины адреса, шины данных и шины управления, к которой подключена память, хранящая данные и код.
А память это огромная одномерная полоска, в которой каждая ячейка имеет свой порядковый номер от 0 до 2^(разрядность шины адреса)-1. И указатель представляет из себя самую обычную численную переменную, хранящую номер (адрес) любой ячейки.
Я не понимаю, почему для многих это настолько сложная тема, а существенное количество новичков забрасывают изучение C после встречи с ними. Они в своей сути максимально элементарны (до тех пор, пока не нужно исправлять уязвимости и ошибки, которые появились в результате злоупотребления или неполного понимания нюансов).
Также существуют ссылки, так или иначе представляющие из себя подвид указателей, но обычно с запретом на арифметику с ними (основная сложность и опасность указателей) и/или подсчетом количества активных ссылок для сборки мусора.
Все языки или имеют указатели (Pascal, C, C++, блоки unsafe в C# и Rust), или являются ссылочными (Java, C#, Python, JS, т.д. (почти все современные языки)). С++ тоже имеет ссылки, но как синтаксический сахар над указателями, призванный упростить их передачу в функции и избавиться от проблемы нулевых указателей.
Ассемблер - если вы даже примерно не знаете, что это такое, то первую часть статьи вероятно можно пролистать и перейти на обсуждение парадигм.
Регистр - именованная численная переменная внутри процессора. Может иметь особое предназначение, а может просто использоваться для хранения любых чисел и арифметики. Их немного.
Инструкция - одиночная команда, представляет из себя последовательность из нескольких байт со специальным значением. Любая программа представляет из себя последовательность инструкций внутри памяти. Указатель на инструкцию, которая будет выполнена следующей, содержится в регистре IP, который сам увеличивается после выполнения каждой инструкции. По-хорошему стоило нарисовать пошаговую наглядную анимацию с демонстрацией всех регистров и куском ассемблерного кода, но мне лень, а в гугле я ничего толкового не нашел.
Метка - константа, содержащая адрес чего-либо. К примеру процедуры или глобальной переменной. Примерно как метка для goto в высокоуровневых языках, но универсальнее. Применяются при написании на ассемблере, в процессоре как таковые не существуют и разрушаются до обычных чисел при ассемблировании и линковке.
Разыменование - операция над указателем, когда тот превращается в переменную с адресом, который был записан в указателе (своеобразный пульт Д/У для переменной).
Парадигма - "стиль" написания и постройки архитектуры программы, частично определяется языком. Технически на том же C можно писать в практически любой парадигме (через костыли можно писать в стиле ООП, через макросы реализовать метапрограммирование, а через нестандартные расширения вообще ядерный бред), но родная для него - процедурная. А Go, к примеру, хоть и имеет недоклассы и методы, но лишен практически всех благ ООП и не сильно далеко ушел от C.
Синтаксический сахар - необязательная возможность, которая сокращает количество кода, повышает его читаемость или удобство поддержки
Стек
Большинство процессоров Фон-Неймановской архитектуры в своей конструкции предлагают механизмы стека. Кто играл в покер должны вспомнить стеки фишек. То есть некие значения, сложенные друг на друга (обычно это переменные, в частности адреса в памяти). При этом основными операциями являются добавление фишки на вершину (инструкция PUSH) и ее снятие (инструкция POP). Еще можно косвенно читать и заменять (перезаписывать) фишки относительно вершины (на вершину указывает регистр SP, неявно обновляется через POP и PUSH) или основания (указывает регистр BP) вглубь.
Стеки можно переключать (но не в MOS6502), это нужно для многозадачности
Помимо хранения локальных переменных стек позволяет делать довольно интересную вещь: мы можем положить на стек все необходимые аргументы (x в математике, но их может быть несколько), адрес следующей инструкции (взяв из указателя инструкции IP, это будет адрес возврата), после чего совершить прыжок на какой-нибудь другой адрес (сохранение адреса и прыжок делаются инструкцией CALL).
А на этом адресе может быть функция. Сначала она кладет текущий BP на стек, после чего приравнивает основание к вершине (BP к SP), тем самым создав для себя "новый стек" сразу после предыдущего (это еще называется стековым кадром), в котором якобы лежит только значение старого основания стека (BP), чтобы можно было восстановить его перед возвратом.
Серое это стековый кадр от предыдущей функции
После чего функция может прочитать переданные ей аргументы относительно основания своего стека вниз (технически это будет выход за границы текущего стека), выполнить с этим какие-либо действия (записать в файл, вывести в консоль, просто перемножить) и сохранить результат (обычно результат сохраняется не на стек, а в регистр AX).
После чего функция восстанавливает старое значение BP, сняв его со стека, и выполняет команду RET, которая снимает со стека адрес возврата и совершает переход на него, тем самым переключившись на инструкцию сразу после CALL.
И эта система так или иначе перекочевала в большинство высокоуровневых языков начиная с FORTRAN. К примеру в C CALL превратился в круглые скобки, RET в return, а адреса и метки в имена (при этом без скобок они все еще являются указателями, то есть адресами).
Пример кода (к сожалению, штатного форматирования не предусмотрено):
#include <stdio.h> int pow2(int x) { return x * x; } int main() { int y = pow2(16); // Вызов функции. В y будет сохранено число 256 printf("%p", pow2); // Без скобок вместо вызова просто выведет адрес функции return 0; // Возврат нуля из главной функции означает отсутствие ошибок. }
Такой стиль программирования называется процедурным (выделение кода в блоки называется структурным). А вот называть процедурный язык функциональным совершенно неправильно, ибо функциональное программирование ≠ процедурное, они даже в разных категориях (императивное и декларативное).
А теперь скомпилируем этот код и разберем ассемблерный листинг
Важно понимать, что стек в большинстве архитектур традиционно растет от больших адресов к меньшим (и в x86). То есть для того, чтобы отодвинуть его вершину вверх, от регистра SP нужно отнимать значения, а вот для ужимания и съедания ненужных значений к указателю на вершину значения прибавляют. И для доступа к значениям относительно основания или вершины это тоже важно учитывать. Это может звучать запутанно, но через время привыкаешь и всё становится очевидным.
Надеюсь это возможно будет разобрать. Код скомпилирован MSVC v19.28 для x86 со стандартными настройками в Godbolt
Post scriptum
Это всё довольно упрощенно. Как минимум, в защищенном режиме используется больше 5 разных соглашений о вызове, которые отличаются деталями реализации. Это было описание для cdecl, обычно используемого в C. Еще часто используются соглашения pascal, fastcall, thiscall, winapi и другие. Fastcall, к примеру, избегает хранения аргументов на стеке, если их возможно передать через регистры, что улучшает производительность. А winapi отличается от cdecl тем, что функция сама очищает стек от аргументов для себя при возврате. А еще я упустил, к примеру, сохранение регистров, которые функция может перезаписать и испортить, а потому обязана предварительно сохранить и перед возвратом восстановить, передачу переменного количества аргументов (как в printf) и возврат значений шире 32 бит (которые не влезут в EAX).
Плюс сейчас мало кто компилирует ПО под защищенный 32-битный режим, а в длинном режиме (AMD64) используется пара других соглашений, основанных на fastcall и имеющих несколько отличий друг от друга.
Так процедура или функция? Или подпрограмма?
Процедурное программирование предлагает делить код на подпрограммы, которые принято называть функциями и процедурами (функция обычно является наиболее понятным, частым и обобщенным названием, поэтому я его использую).
Процедура от функции отличается только тем, что функция возвращает какое-то значение (как в математике), а вот процедура этого не делает. Не во всех языках явно есть процедуры (в Pascal есть, но не в C). В таком случае их заменяют функции, возвращающие ничего (void, Unit, undefined, None).
Хотя и тут есть свои особенности. К примеру функция, возвращающая void в C и Java является прямым аналогом процедур, как-либо использовать возвращенное значение из такой функции невозможно, ибо его нет физически. А вот Unit в Kotlin это синглтон (а-ля единственная и уникальная константа уникального типа), ссылку на который можно присвоить в переменную, но в этом особого смысла нет. Undefined в JS и None в Python тоже уникальные константы специальных типов.
Но не тут-то было
Вроде бы процедура никогда не может ничего вернуть...
Только она этого никогда не делает напрямую. При она этом может записать результат в глобальную переменную, а еще часто принимает в себя указатели или ссылки, по которым может записать результат. Это еще удобно тем, что можно "вернуть" несколько значений. Пример:
void procedure(int x1, int *x2, int *x3) { // Функция ничего не возвращает, то есть это процедура *x2 = x1 * x1; // Разыменовываем указатель и записываем по его адресу результат. *x3 = x1 * x1 * x1; // Разыменовываем другой указатель и записываем по его адресу результат. } int y1, y2; procedure(16, &y1, &y2); // В y1 оказался результат, аналогичный прошлому примеру. А в y2 куб числа.
PS: оператор звездочка при указании типа превращает его в тип-указатель, а при применении на переменную-указатель разыменовывает ее до изначальной переменной. Амперсанд превращает переменную в указатель на нее (иногда еще называется оператором получения адреса).
То есть мы вернули сразу 2 разных значения из процедуры, которая якобы ничего не возвращает. Чудеса. Подобные чудеса есть в том числе в Pascal с явным делением на процедуры и функции (плюс там это сделано немного удобнее). Хотя механизм тут отличается от того, который используется в возврате значения из функции и совпадает с механизмом передачи обычных аргументов, поэтому никакой магии.
Еще про связь с математикой
Главное отличие функций в программировании от функций в математике в том, что они могут делать что-то на стороне и не обязаны возвращать одинаковый результат при одинаковых аргументах.
К примеру функция получения случайного числа по определению не может существовать в математике, если она не принимает в себя предыдущее случайное число или зерно для его видоизменения. Или функция записи в файл, возвращающая 0 в случае успеха и другое число при провале. Ко всему прочему, такая функция имеет побочный нематематический эффект, то есть запись в файл, что тоже недопустимо традиционной математикой без высоких абстракций.
Поэтому придумали чистые функции. По сути это ограничитель, которые делают функцию полным отражением таковой в математике. Им запрещено возвращать разные значения при одинаковых аргументах (точнее запрещено всё, что может такое позволить сделать), запрещено обращаться к нечистым функциям, запрещено обращаться к тому, что не является аргументом или локальной переменной, запрещены вообще любые действия, которые могут сделать что-то на стороне (даже функция sin() в C не всегда является чистой, ибо может зависеть от состояния FPU).
Чистые функции через ключевое слово pure явно есть в D и FORTRAN (проверка на чистоту во время компиляции), а также являются основой функционального программирования.
Чистая процедура тоже имеет право на жизнь, используя механизм со ссылками (на счет указателей не уверен из-за возможности арифметики над ними).
Функциональное программирование
Это очень сложная категория, которую постоянно путают с процедурным программированием. А еще это де-факто противоположный стиль: декларативный. Традиционное императивное программирование детально описывает процесс получения результата, а декларативное сам результат, без деталей реализации (хотя разделение обычно довольно нечеткое). При этом второй типичен для языков разметки типа HTML и CSS. То есть, условно, как одна и та же операция могла бы выглядеть в императивном и декларативном стиле:
document.tags.A.color = "blue" /* Императивный (JSSS). Сделать ссылки синими */
a { color: blue } /* Декларативный (CSS). Ссылки должны быть синими */
Почувствуйте разницу.
И функциональное программирование я никогда не изучал и слишком мало о нем знаю. Так что готовьтесь к ошибкам и не воспринимайте всё за чистую монету.
Внутри чистого функционального программирования
Основано полностью на математике, все функции обязаны быть чистыми. Операция присваивания запрещена (разрешены константы), переменных в привычном виде нет. Прикольно? Очень!
Во многих процедурных языках функции и процедуры являются объектами второго класса (не путать с классами из ООП), что не позволяет их свободно присваивать в переменные, передавать как аргументы в другие функции или возвращать из них (только через указатели). Функциональные языки расценивают функцию как объект первого класса, то есть их можно, а часто нужно передавать в другие функции напрямую.
Это дает некоторые преимущества, особенно в плане безопасности и при работе с многопоточностью (по причине неизменяемости данных и отсутствия глобального состояния), но вся концепция имеет один фатальный недостаток: вы мало чего полезного можете сделать, ибо что ввод, что вывод являются математически нечистыми, а потому запрещены. Вот такое вот гениальное изобретение безумных математиков.
Функциональное и процедурное программирование. Холст, масло
Каждый чисто функциональный язык выкручивается из этого по-своему, к примеру через монады. Это позволяет им существовать вне шуток и даже использоваться на практике.
Это не все особенности функциональных языков, но одни из самых важных. Самый известный такой язык: Haskell. Функциональные F#, Lisp, ML и многие другие не являются 100% чистыми.
Смешанное функциональное программирование
Последнее время часто используются смешанные языки, к примеру вместе с процедурным или объектно-ориентированным программированием, что избавляет от ограничений математики, но дает гибкость в том, что функциями можно оперировать как с любыми другими типами данных, а еще дает много очень удобного сахара вроде замыканий и лямбд. Это C#, Python, JS, частично Java и C++ (в них нужны костыли в виде интерфейсов из одного метода или оберток над указателями).
Особенности
Функции как объект первого класса. К примеру в C# это реализовано через систему делегатов, которые представляют из себя тип-обертку для функций:
Action<string> printer = Console.WriteLine; // Action<string> - тип-делегат. Неявно создаем его объект и присваиваем туда функцию printer("Hello, World!"); // Вызываем функцию через делегат
Локальные функции: как обычные, только вложенные в другую функцию (объявленные внутри нее)
void Func1() { // Глобальная функция void Func2() { // Локальная функция Console.WriteLine("В локальной функции"); } Func2(); }
Лямбды: возможность объявить безымянную функцию посреди кода (часто удобнее локальных)
var pow2AsLambda = x => x * x; // => - оператор лямбда-выражения pow2AsLambda(5); // Вернет 25
Замыкания (можно использовать вместе с лямбдами и локальными функциями):
int someValue = 42; var pow2AsLambda = x => x * x + someValue; // someValue будет захвачено замыканием, хотя напрямую не передано pow2AsLambda(5); // Вернет 67
Особенность замыканий в том, что они могут захватить локальную переменную родительской функции внутрь себя, продлевая ей время жизни за пределы блока с кодом. После чего такую лямбду можно передать в другую функцию, которая просто так не имеет доступа к someValue (в обычных условиях someValue вообще уже будет уничтожен), а вот переданная лямбда сможет ее прочитать или записать всегда и откуда угодно. И самое интересное то, что значение этой переменной будет сохранятся между вызовами к замыканию. То есть она становится глобальной, но видимой только из функции-замыкания.
ООП
Посмотрим на индекс TIOBE по популярности языков. Фиолетовым я пометил чистые функциональные языки. Языки, имеющие возможности, присущие функциональным языкам (смешанные) - синим, процедурным - красным, а объектно-ориентированным (ООП) - зеленым. Языки, в которых нельзя объявить функцию, принадлежащую самой себе или модулю, процедурными считать не совсем корректно (Java).
Не претендую на 100% точность
Видите фиолетовые точки? И я не вижу. А вот синих 12. В то же время красных и зеленых по 16. При этом реально применяемый чисто процедурный язык всего 1: С. Остальные имеют какую-либо встроенную поддержку других парадигм.
И сейчас практически всё большое ПО пишут в ООП. Ибо позволяет хоть как-то сдерживать структурированность кода после перехода с десятков тысяч строк к сотням (и миллионам).
Внутри
ООП является развитием идеи процедурного программирования. Проблема была в том, что помимо кода в программе существуют еще и данные, которые было бы неплохо связать с соответствующим им кодом. И через некоторое время после появления процедур появились структуры (они же записи в Pascal, не путать со структурным программированием).
Структуры были удобным способом объединить несколько переменных в единое целое. Пример:
typedef struct user_struct { char *username; int userid; int reputation; } user_t; user_t someuser = { "IvanKr08", 17002, 253 }; // Инициализируем значениями someuser.reputation += 10; // Обращаемся к полю
(Вместе с этим объявляем структуру новым типом через typedef, что не делается по умолчанию в C, в отличии от C++. Один из ярких примеров несовместимости C и C++):
После чего user_t превращается в новый тип, как int или char. Можно создать полноценную переменную типа user_t (или массив такого типа), а потом обратиться к какой-нибудь ее части (полю) через оператор точки (.). Можно сделать функцию, которая будет принимать или возвращать переменную типа user_t (к примеру someuser). Можно сделать указатель на user_t, тогда для обращение к полю используется оператор стрелки (->). Или можно встроить переменную типа одной структуры в другую, это тоже не запрещено. Внутри структурная переменная представляет из себя последовательно слепленные поля в одно целое.
Если поля разного размера, то часто добавляют пустоты между полей в целях выравнивания по размеру наибольшего поля и улучшения производительности, но это сложная тема
Возвращаемся к ООП
Суть ООП в том, что помимо полей структуры могут содержать процедуры и функции. Такая структура называется классом, переменная класса - объект, а процедура класса - метод.
Метод принципиально ничем не отличается от любой процедуры или функции, кроме того, что неявно принимает в себя специальный аргумент this (в Python это делается явно, в некоторых языках вместо this может быть self). Он содержит в себе ссылку/указатель на объект класса, от которого был вызван. Пример:
class User { public: char *username; int userid; int reputation;
void print() { printf("Пользователь \"%s\" (%i). Репутация: %i\n", this->username, this->userid, this->reputation); // Постоянно писать this-> не обязательно. Если локальной переменной с таким именем нет, то будет произведен доступ к полю } }; User someuser = { "IvanKr08", 17002, 253 }; // Инициализируем значениями someuser.print(); // Вызвали метод, print() неявно получил в себя указатель this, который указывает на someuser someuser.reputation += 10;// Обращаемся к полю someuser.print(); // Теперь вывод поменяется
Да, никто не мешает объявить обычную функцию, которая будет явно принимать в себя указатель на User и ничего не поменяется, и так повсеместно делают в C (тот же WinAPI на этом построен целиком и полностью), но ООП на самом деле крайне сложная, большая и холиварная тема, которая развивалась на протяжении 60 лет в разных направлениях и которую поднимать тут глупо. Только опишу еще несколько разновидностей методов:
Статичный метод - как обычный метод, только не получает в себя this и вызывается от имени класса, а не объекта (не someuser.method(), а User::method()). Зачем это нужно и в чем отличие от просто функции? Статичный метод можно спрятать за инкапсуляцией, плюс он привязан к классу, а не болтается в глобальном пространстве имен.
Конструктор - автоматически вызывается при создании нового объекта. Может иметь аргументы, тогда обязан явно вызываться как функция с именем класса, т.е. User("IvanKr08", 17002, 253)
Деструктор - есть в C++. В C# называется финализатором и имеет несколько важных отличий. Автоматически вызывается перед уничтожением объекта (к примеру выход из области видимости, явное удаление оператором delete или удаление сборщиком мусора в C#). Не может иметь аргументов.
Свойство - есть в Delphi и C#, куда перешел от первого. С точки зрения синтаксиса это поле, которое можно читать и записывать, только вместо прямого обращения в память вызываются соответствующие методы (set и get). Пример: ... int SomeProperty{ get =>42; set => Console.WriteLine("Set"); } ... test.SomeProperty = 10; // Значение никуда не сохранится, будет выведено "Set" в консоль Console.WriteLine(test.SomeProperty); // Всегда будет 42
Перегрузка оператора - специальный метод, который позволяет переопределить стандартные операции для типа. К примеру нельзя сложить два объекта User или User и число, но если перегрузить оператор +, то можно будет определить свою логику для этого (не обязательно, чтобы оно что-то реально складывало. Это может быть любое действие).
Индексатор - синоним перегрузки оператора квадратных скобок. Объект начинает вести себя как массив.
Функтор - перегрузка оператора круглых скобок (иначе называется перегрузкой оператора вызова функции). Позволяет "вызывать" объект так же, как и функцию. Звучит запутанно, но можно погуглить. Есть в C++. Также бывает функтор в функциональном программировании, но он не имеет ничего общего с функтором в C++.
Виртуальная функция (метод) - самый интересный и сложный тип, составляет основу полиморфизма. Вкратце объяснить его невозможно, но одним из ключевых принципов ООП является наследование, то есть один класс (наследник) копирует в себя все поля и методы другого класса (родитель), и может добавить новые. И суть в том, что указатель (ссылка) на объект класса-наследника может быть присвоен в переменную-указатель родительского типа. А самое интересное то, что любые обращения (к примеру вызовы методов), сделанные через родительский указатель, будут вести себя аналогично обращениям, сделанным напрямую через указатель с типом наследника. Это называется полиформизмом. Но это было бы не слишком полезным, если бы не возможность объявить метод в родительском классе виртуальным, а в наследнике полностью переопределить его код.
И то, что я забыл
Послесловие
Если вы осилили эти 3000 слов и даже смогли что-то понять, то найдите и распечатайте себе утешительную грамоту. А я устал и пойду искать смысл жизни...
UPD: исправлены косяки форматирования, очепятки, добавлено еще пару пунктов про разновидности методов и функциональное программирование.
Ну, что же, наследники Р-7 научились в спутники и орбиту Земли. Но, вырвавшись вперёд в космической отрасли ЦК КПСС уже не мог остановиться - нам нужен физический спутник Земли, т.е. Луна.
И... Как обычно начали модернизировать Р-7. Перелопатили её и появилась третья ступень "Блок-Е", напомню, что в "Молнии", третья ступень именовалась "Блок-И" Точно так же использовалось огневое отделение блоков (стр. 11), то же топливо "керосин-кислород", но в баках пришлось использовать гидродемпферы (вроде упоминал по Р-7А)...
Но, как всегда, первопроходцы просто обязаны что-то сделать не так, столкнуться с чем-то неизведанным. Так и с РН "Луна" случилось.
Цель первого запуска (напомню - январь 1959 года) преодолеть вторую космическую (успешно), но основную миссию АМС "Луна-1" (попасть в Луну) смогла выполнить только уже российская миссия "Луна-25" (сорри за стёб, у всех бывает, главное, что бы прошло).
Так что проект "Луна" был частично успешным. Вторая космическая достигнута, но цель не поражена.
Были ещё туева хуча запусков на орбиту, отлажены системы, движки, орг. работы и пр. Всё это проводилось параллельно. Вся линейка от начальной Р-7 и далее работала как на заводе форда - конвейером(предвещая срач, сразу скажу - конвейер придумал не Форд).
И... Когда правительство СССР убедилось в надёжности ракет, решили вместо собачек запустить человека.
И ракета начала называться "Восток". Да-да... Через "Луну" Р-7* медленно превратилась в не менее легендарный "Восток" (напомню -это всё ещё та самая Р-7, это как из FIAT-124 дошли до Нива-3д)
Товарища на марке я постараюсь сделать отдельным постом, за пределами этой серии.
И так. Пока у нас на выходе модернизированная Р-7, двиглы почти те же (керосин-кислород) РД-108, РД-0109, Но эпопея "Востоков" только начинается. Ещё не взлетел Гагарин, Ещё "Восток" не отработал программу по спутникам "Космос" и "Зенитам"... У ракты-носителя "Восток" насыщенная жизнь.
З.Ы. Следущим постом про "Великолепную семёрку" будет Гагарин, а потом деятельность наследника Р-7 в области спутников и запусков зондов на ....
Друзья, не так давно я размещал статью на Вомбате про эффект памяти формы. Явление довольно интересное - фактически мы нагреваем металлический образец, а он мгновенно меняют свою форму. Со стороны выглядит как магия, причём особая и уличная. Таких видео достаточно в интернете, но вот развернутого описания физики эффекта практически нигде нет. Что же, я решил попробовать сделать интересное и информативное обучающее видео по этому вопросу. Смотрите, лайкайте, подписывайтесь!
Космотелескоп "Джеймс Уэбб", висящий в точке Лагранжа L₂ не перестаёт озадачивать учёных. Его фишкой является сегментированный (как у насекомых) инфракрасный глаз, диаметром в шесть с половиной метров.
А по простому написать, где эта точка "G" находится аффтар не мог?
Смысл смотреть в инфракрасном диапазоне в том, что данной длинне волны пофиг на пылевые облака в космосе и, внимание, он могёт глядеть на очень далёкие объекты, когда из-за красного смещения они (эти объекты) уже не видны в других диапазонах, а радиотелескопы имеют малое угловое разрешение из-за большой длинны волны.
Но в данном случае он "смотрел" достаточно близко, осматривал окрестности нашей с Вами чёрной дыры Стрелец-А*, что в центре Млечного Пути, и сквозь облака пыли и газа обнаружил, с помощью своей NIRCam, область звездообразования из ионизированного водорода.
Разукрашенная фоточка "Джеймса". Голубым отмечен тот самый "ионизированный водород".
Что самое примечательное, так это то, что данная область находится всего в 300 световых годах от нашей "чёрной дырки", а вот размер имеет в 50 световых лет. Помимо водорода там оказались и более тяжёлые облака и зародыши протозвёзд с массой более 30 солнечных. Что же не так? Дело в том, что такая близость к сверхмассивным чёрным дырам должна тормозить процесс звёздообразования, тут же астрономам есть над чем задуматься...
27 октября, примерно в 6:30 по Москве над самой столицей и пригородами пролетел яркозелёный шар. Его видели в Раменском, Фрязино, Люберцах, Красногорске и друших местах подмосковья
Красиво летит.
Сгорел объект довольно быстро и до земли почти ничего не долетело. Толпы видосиков по всем соцсетям и сразу же начались конспирологические догадки, вплоть до зелёных человечков (ну зелёным же горели 😆 ) Так в телеге MASH предположили, что "зелёный цвет даёт никель, а белый даёт магний — из них делают детали космической техники. Два этих материала — основные в космопромышленности." Никель на самом же деле родственен железу и на Земле, и в космосе его полно, в том числе и в виде метеоров. Например, руководитель Лаборатории солнечной астрономии ИКИ РАН Сергей Богачев утверждает, что это обычный метеороид. Он заявил: "Это, скорее всего, метеорит размером сантиметров десять. <…> Часто люди удивляются и не верят, что камни пяти-десяти сантиметров создают такие сильные следы, но это действительно так".
Да не простой, а самый сложный в мире. Человеку просто нереально найти путь. Математики Бристольсого университета решили использовать для этого фрактальную геометрию, в частности Гамильтовы циклы.
Слабо найти выход?
Подобные системы очень хорошо массштабируются без повторений. Такими свойствами обладают квазикристаллы - вроде и кристалл, но структура упорядочена не точно.
Атомная модель Al-Pd-Mn квазикристалла (фото из вики)
Естественно учёные не оставили лабиринт без решения. Увы, я не придумал как картинку спрятать под спойлер:
Есть такое вещество как ЦИС-Жасмон (разрешаю прочитать с южным акцентом). Это (3-метил-2-(2-пентенил)-2-циклопентен-1-он) с общей формулой C₁₁H₁₆O, циклический кетон (сорри за мат). Состоит из двух изомеров - собственно ЦИС-Жасмон и Транс-Жасмон.
Угадайте где Транс?
Это бесцветная или желтоватая маслянистая жидкость с сильным запахом жасмина. Но не всё так просто. Если ЦИС-изомер имеет очень сильный запах жасмина (блин, чуть ли не влепил ссылку на певицу Жасмин) потому в парфюмерии используют его раствор с концентрацией в 0.1%, хотя продают и концентраты в объёме 5-10 мл (при этом ценник такого флакончика близок к 1 тыс. руб).
А вот Транс-Жасмон (если не угадали на картинке, ответ 2) пахнет менее выраженно и с примесью запаха жира (ну не зря же он "транс").
Как и большинство подобных веществ не растворяется в воде, но хорошо растворяется в любимом многими этаноле и маслах.
Оба не ядовиты - полулетальная доза для крысы - 5г на килограмм веса (поваренная соль, к примеру, имеет меньшую дозу в 3г/кг).
Как понятно из названия получают из цветов жасмина, но это же вещество так же содержится в цитрусовых и многих других эфирных маслах. Основной потребитель естественно парфюмерия (сюда же идут различные отдушки, освежители и пр.), но так же может использоваться и в кулинарии.
В прошлом посту я показал, что на самом деле, в природе, нет никакой связи между периметром и площадью фигуры. В качестве примера была снежинка Коха. Вроде пример надуманный - и всё это просто игры математиков. А вот нифига. В природе эти фракталы встречаются почти везде.
Самый популярный и наглядный пример природного фрактала - лист папоротника
Глядя на фотку выше математик Майкл Брансли решил описать его математически (делать ему больше нечего что ли?) и, у него получилось(более-менее точно):
Один в один же папоротник
Та же береговая линия острова. Чем точнее будем вычислять периметр острова тем тоскливее нам будет (периметр таких фракталов обычно стремится к бесконечности).
Но у фракталов есть ещё одна характеристика - размерность.
Например у математической (а не ручкой поставленной) точки размерность равна нулю, у линии - единице, у плоскости двойке, у куба - тройке, а вот у сферы снова двойке (это Вам для разминки мозгов), в то время как у шара - привычная тройка. Т.е. на линии мы можем взять точку отсчёта и обозначить положение на линии одной координатой, на плоскости уже двумя, у куба - три(ширина, высота и длина) и т.д.
А что же с размерностью у фракталов?
Думали-думали и придумали. Решилм использовать фрактальную размерность. Её начали использовать для определения сложных объектов (не обязательно бесконечных фракталов). Фообще слово фрактал (fractured) в математике означает "дробное". Определили енту величину как меру сложности подобных структур. Как оценить енту меру-то? Ведь математикам нужно конкретное число, а не то что один сказал - "просто", второй "сложно", третий "пойдёт"... Решили, что на определённом массштабе определяется количество отдельных элементов и как это число меняется при уменьшении массштаба.
Математически выглядит так:
D — фрактальная размерность, показатель сложности и структуры объекта;
log(N) — логарифм числа элементов, необходимых для
покрытия фрактала. По мере уменьшения масштаба размер элементов
уменьшается, а их количество увеличивается;
log(S) — логарифм обратного масштаба (размера элементов). Чем меньше элемент, тем больше их требуется для покрытия всей структуры.
А формула простое соотношение D=log(N) / log(S).
Для той же снежинки Коха
GIF
Сначала просто, а потом просто красиво
Снежинка строится на отрезке, который делится на три равные части, затем на средней части создается «пик» в форме равностороннего треугольника без основания. В результате каждый исходный отрезок заменяется на 4 меньших, и так далее. Получаем, что S = 3, N = 4, а размерность log(4) / log(3) ≈1.261859507...
Вот такие чудеса, вомбатяне, оказывается имеются и дробные размерности, причём в самой природе.
Сегодня в 20:13 по московскому времени со стартового комплекса 31-й площадки космодрома Байконур специалисты предприятий Госкорпорации «Роскосмос» выполнили пуск ракеты-носителя «Союз-2.1б» с космическим аппаратом «Бион-М» № 2.
Фоточка со старта
На борту аппарата 75 мышей, мухи Дрозофилы, самые различные растения, мхи, семена и даже растения, выращенные и из семян, которые уже летали в космос.
Орбиту сделали полярной (аппарат будет пролетать над полюсами земли). По оценкам специалистов, уровень космической радиации над полюсами Земли на 30% превышает этот показатель на орбите, по которой летает Международная космическая станция.
Упаковываем «Бион-М» №2 в обтекатель
«Бион-М» № 2 - продолжение исследований, направленных на изучение воздействия радиации, невесомости и пр. факторов на живые организмы. «Бион-М» последний раз летал в 2013м году, а сама программа таких исследований длится больше 50 лет.
Если разместить стабилизатор спереди, то он сделает ровно противоположное от своего назначения - дестабилизирует ракету.
Повод расчехлить графический планшет
Во-первых, идеально симметричных реактивных снарядов не существует. Есть только понятие допустимая погрешность. Так что рано или поздно снаряд начнет лететь криво. Компенсировать это можно, либо задав сильное вращение вокруг продольной оси, как в нарезной артиллерии, либо... Собственно, стабилизаторами.
Во-вторых, центр тяжести у этих балумб находится ближе к центру, ещё и динамически изменяется по мере отработки топлива. Да, он может сместиться ближе к носу ракеты, но всё равно останется позади носового стабилизатора.
В-третьих, воздушные потоки тоже не идеально параллельно снаряду направлены. Порой пуски приходится делать перпендикулярно ветру.
И ещё туева хуча фаторов.
Поэтому ракета сразу завалится в какую-то сторону, а давящие в носовые стабилизаторы потоки с удовольствием помогут ей провернуться на 180 градусов.
И это вращение продолжится, пока не закончится топливо. А далее есть реальные шансы, что снаряд стабилизируется в положении задом наперёд и покажет относительно нормальную траэкторию в конце полёта... Только траэктория эта после всех кренделей, что совершит ракета к этому моменту, может указывать куда угодно, хоть обратно в стреляющего.
Почему именно сзади стабилизаторы работают... Потому что теперь центр тяжести спереди, и воздушные потоки, наоборот, своим давлением на стабилизаторы не дают ракете встать боком. Масса, которая тащит их за собой - имеет всяко больше энергии, чем хвост ракеты, поэтому хвост больше не сможет обогнать центр масс.
Исключения - ракеты с активными аэродинамическими поверхностями стабилизаторов (по сути, стабилизаторы с рулями, управляемые системой наведения) наподобие современных "воздух-воздух" или "земля-воздух", созданные для преследования маневренных целей типа истребителей. Они достаточно прочны, чтобы резко повернуть хоть на 90 градусов и более относительно вектора своего изначального движения, и это при работающем двигателе. Тем самым, хвост на мгновение догоняет центр масс.
ISpace не прекращает попыток прилунить свои модули на Луну. Первая миссия стартовала в декабре 2022 года. Весной 2023 года посадочный модуль Hakuto-R вышел на орбиту Луны, а 25 апреля включил тормозные двигатели и начал спуск со стокилометровой окололунной орбиты, который занял час
и должен был кончиться прилунением внутри кратера Атлас
в северо-восточной части видимой стороны Луны. Однако связь с ним
в расчетное время посадки не удалось установить,
дальнейший анализ телеметрии показал, что на заключительном этапе
спуска на Луну уровень топлива оказался у нижней отметки, после чего
скорость спуска резко увеличилась. Это позволяет предположить, что
у посадочного модуля закончилось топливо и его двигатели заглохли, после
чего с модулем была потеряна связь.
Кадр прямой трансляции, через десять минут попыток установить связь трансляция была прервана. Связь установить не удалось.
И вот примерно такая же участь постигла и вторую миссию.
А вот сфоткать поверхность Луны перед посадкой он успел.
Resilience отправился в космос в январе этого года, а в начале мая вышел
на окололунную эллиптическую орбиту. В конце мая аппарат перешел на
круговую орбиту с высотой сто километров, а вечером 5 июня 2025 года
начал спуск с нее в Море Холода на видимой стороне Луны.
Однако телеметрия с модуля была потеряна за менее чем две минуты до
расчетного времени касания поверхности Луны, после чего несколько часов
инженеры пытались наладить с аппаратом связь и перезагрузить его. На
пресс-конференции, посвященной
итогам посадки, представители ISpace объявили о завершении миссии из-за
невозможности установить связь с модулем. Анализ имеющихся данных
показал, что модуль успешно вертикализовался и включил двигательную
установку на торможение на высоте 20 километров. Однако на финальном
этапе снижения возникла задержка в получении достоверных данных от лидарапо расстоянию до поверхности и модуль не успел эффективно
погасить скорость снижения, совершив жесткую посадку.
Эту увлекательную беседу мы начнём с того, что обратимся к стандартному пониманию суперпозиции в обычной физике.
Обычная суперпозиция
В стандартном случаепринцип суперпозиции означает, что если у вас есть несколько решений некоторого уравнения, описывающего физическую систему, то любая линейная комбинация этих решений также будет решением этого уравнения.
Звучит довольно путанно, но поможет простой пример. Представьте себе, что вы бросаете два камня в пруд. Каждый камень создает механические волны на поверхности воды. В тех местах, где волны от разных камней встречаются, они накладываются друг на друга (суперпозиционируются) или...если ещё проще...Складываются.
Можно смело сказать, что итоговая волна, которую вы видите на поверхности пруда, является результатом суперпозиции волн от каждого камня. Это линейная суперпозиция, потому что амплитуда результирующей волны в каждой точке является суммой амплитуд волн от каждого источника. Ну и важно отметить, что складывается оно по всем правилам математической обработки результата - плюс складывается с минусом, учитывается направление вектора и так далее. Некоторые почему-то притягивают сюда логику абсолютного значения.
И тут всё хорошо и логично. Но потом мы сталкиваемся с квантовой физикой. Там естьквантовая суперпозиция.
Определение квантовой суперпозиции и примеры
Это совсем другое понятие, хотя логика суммирования тоже может к нему применяться. Нам важно понимать что это такое, потому чтосуперпозиция - это база для всей квантовой механики.
Начнём с примера. Процитирую, пожалуй, классическое представление проблемы и не менее классический пример.
Представьте, что у вас есть монетка, которая крутится в воздухе. Пока она не упала, нельзя сказать, орёл там или решка – она как бы “и то, и другое сразу”. Вот это и есть квантовая суперпозиция!
В квантовой физике частицы (например, электроны) могут находиться в нескольких состояниях одновременно (например, иметь разный спин или энергию).Пока мы не измерили, в каком именно состоянии частица, она находится в “суперпозиции” всех возможных состояний. Только в момент измерения частица “выбирает” одно конкретное состояние.
Суперпозиция - это как “квантовая неопределенность” до момента наблюдения.
Осознать это в здравом уме не так-то и просто.
Кот Шрёдингера как пример безумия
Вот и Шрёдингер подумал, что это какой-то бред и привёл легендарный пример с котом. Да, я не устаю напоминать, что кот Шрёдингера был примером того, что квантовая физика - это безумие. Но в историю, как это часто бывает с событиями, он вошёл как милое животное, которое и живое и мёртвое.
Он предложил мысленный эксперимент. В закрытом ящике следует расположить кота и флакон с ядом. Флакон с ядом может быть разрушен, а зависит это от системы срабатывания, которая зависит от вероятности распада частицы. Мы умышленно подбираем такой вариант, когда это фифти-фифти или 50 на 50. Мы сможем узнать, что именно случилось с котом только в том случае, когда откроем ящик. Но до того момента кот сразу и живой, и мёртвый с равно вероятностью. Эксперимент иллюстрирует сразу и эффект наблюдателя, и состояние квантовой суперпозиции.
Квантовую позицию не представить в здравом уме
А теперь прочитайте это ещё раз и попробуйте перенести состояние фифти-фифти на обычную жизнь. Не получается? Именно так!Всё потому, что между квантовой физикой и физикой стандартной (которая нами легко воспринимается) существует серьезный барьер.
По сути любое квантовое событие рассматривается именно как кот в закрытом ящике. Я много раз поднимал эти темы на канале.
Состояние любой квантовой системыописывается квантовой или волновой функцией. Это база. И она не имеет определенного описания конкретного варианта или состояния системы.
Мы получаем результат только в случае наблюдения (парадокс наблюдателя). По сути дела это можно перефразировать, что конкретное состояние из множества вариантов проявляет себя только в момент взаимодействия с системой (это детектирование или что-то аналогичное). Такое взаимодействие принятоназывать коллапсом волновой функции.
И тут целая вереница интересных размышлений и разбора сопутствующих проблем (например про варианты, которые были у системы или про скрытые параметры). Но не будем пока отвлекаться. Всё это интересно, однако нам нужно познать квантовую суперпозицию.
Квантовая суперпозиция - это МАТЕМАТИКА
Очень важно осознать, что квантовая физика отталкивается от математики. Переносить туда знания о макромире не то, чтобы сильно правильно.
Квантовая суперпозиция - это математика и только потом попытка наложить её на физику.
Для того, чтобы в должной мере понимать проблему, полезно изучать историю физики. Но я упрощу вам задачу и сделаю это за вас. Вывод там один -почти все квантовые явления начинаются с математического анализа. Это не физика, в которой встречается математика, это математика, которую потом пытаются найти в реальности и даже частенько находят.
Пример наблюдения квантовой функции в реальности
Вот, например, в 1993 году Дон Эйглер и его коллеги из лаборатории IBM Almanden в Сан-Хосе придумали способ реализовать студенческую задачу про частицу в ящике в реальной жизни. Это как раз способ моделирования суперпозиции.
Используя методы манипуляции отдельными атомами (ранее использовавшиеся для написания «IBM» атомами на металлической поверхности и про это было на канале), Эйглер и его команда поместили 48 атомов железа на медный лист таким образом, чтобы образовать твердую стенку радиусом 7,1 нанометра. Затем они инжектировали электроны в эту яму. Используя сканирующий туннельный микроскоп, который может улавливать отдельные электроны с поверхности, они измерили плотность электронов в разных точках загона.
При разных уровнях заполнения загона электронами они могли визуализировать плотности электронов, связанные с отдельными волновыми функциями в загоне. Вы можете прочитать об этом в их оригинальной статье в журнале Science: Crommie, Lutz, and Eigler, Science 262, 218 (1993).
По сути это наблюдение загадочной волновой функции на практике, где электроны вели себя согласно расчёту.
Получается, что как-то доходчиво представить математическую суперпозицию в терминах стандартной физики очень сложно. Механику сюда не притянуть. Лучшим примером остаётся монетка в воздухе, но и тут не всё так просто.
В классической механике объекты всегда имеют определенные значения своих свойств (например, положение или скорость). Суперпозиция просто описывает, как комбинируютсязначенияэтих свойств от разных источников.
В квантовой механике, как мы уже обсуждали, суперпозиция означает, что объектне имеет определенного значениясвойства до момента измерения. Он находится в “смеси” всех возможных значений. Это принципиальное отличие, которое делает квантовую суперпозицию гораздо более загадочной и контринтуитивной, чем классическую.
Это говорит лишь о том, что не зря квантовые системы отталкиваются от математики, накладывая расчётные состояния на реальность. И можно было бы плеваться и говорить, что это не настоящая физика, но примеров, когда это работает успешно, вполне хватает. Например, в вашем устройстве, на котором вы сейчас читаете текст, есть транзисторы с квантовым туннелированием и это работает.
Дальше нам остаётся спорить про выбор конкретных состояний или про существование истинной случайности, про хаос или детерминированную, но сложную математическую модель и про то, что происходит при детектировании частицы в опыте Юнга. Но это уже совсем другая история.
В государственном парке Асиломар в Пасифик-Гроув, штат Калифорния, был обнаружен полный скелет морской выдры, но кости её отливали фиолетовым цветом. Народ озадачился, но биологи быстро их успокоили.
Интересный оттенок.
Оказывается эти выдры жрали в основном фиолетовых морских ежей. Со временем фиолетовый пигмент морских ежей, называемый эхинохромом, накапливается в их зубах и костях и окрашивает их. Что самое интересное, морские ежи весьма богаты различными пигментами, и в этом нет ничего удивительного. Практически все ежи цветастые.
Что самое интересное, не только выдры умеют запасаться краской в костях или коже. Например, фламинго становятся розовыми из‑за креветок в рационе, у древесных лягушек кости могут зеленеть, а у людей при избытке моркови в еде кожа может приобретать желтоватый оттенок — это называют каротинемией.
А всё потому, что многие важные и сложные соединения, необходимые для зарождения жизни могут формироваться не на планете, а прямо в космосе... Если раньше уже находили сложные молекулы на основе углерода, вроде бензольных колец. То тут добрались уже до сложных соединений серы, которые просто необходимы для синтеза белков и работы ферментов, а также сера входит в состав аминокислот метионин и цистеин.
Нашли енти молекулы по микроволновому излучению молекулярного облака G+0.693-0.027 в центре нашей галактики на расстоянии всего 27 тысяч световых лет.
Вот так выглядит схематическое изображение "важной" молекулы.
А называется она 2,5-циклогексадиен-1-тион (ненавижу когда химики матюгаются), который является структурным изомером тиофенола (c-C6H 6S).
Причём метод, используемый учёными позволяет идентифицировать молекулы по спектру с высочайшей точностью, как вора по отпечаткам пальцев. Зафиксированный спектр излучения подвергался преобразованиям "chirped-pulse Fourier" (честно говоря я не понял суть метода и не знаю как его перевести на русский, гугло-переводчик и пр несут бред)...
Отсутствие серы в таких сложных молекулах было весьма сложным препятствием, потому как сера, попадающая или уже имеющаяся в наличии на планете обычно сразу вступает в реакцию с сильными окислителями (кислород, фтор, хлор), а оттуда вытащить её в состав к-либо органической молекулы весьма и весьма сложно. Теперь их нашли, что делает сильно снижает возможность зарождения жизни в "планетарной пробирке" по типу наша планета...
В музейных запасниках и частных коллекциях военной техники порой встречаются устройства, назначение которых с первого взгляда остается загадкой. Одним из таких артефактов является массивная камера в деревянном ящике, маркированная как "A.A. Close Range Attack Camera" или "A.A. Verifying Camera". За этими техническими обозначениями скрывается увлекательная история о том, как фотография стала инструментом военной подготовки в самые драматичные моменты Второй мировой войны.
Появление авиации в Первой мировой войне поставило перед военными специалистами принципиально новую задачу. Если тренировка стрельбы по наземным целям не представляла особых сложностей — достаточно было установить мишени на полигоне, — то подготовка зенитчиков требовала кардинально иных подходов. Воздушные цели движутся с высокой скоростью, меняют направление и высоту, а использование самолетов в качестве мишеней было крайне рискованным предприятием.
Первые попытки решения этой проблемы выглядели довольно экзотично. Военные экспериментировали с воздушными змеями, оснащенными рулевым управлением и системой двухлинейного контроля. Оператор мог маневрировать таким змеем, имитируя движения вражеского самолета. При ветре силой не менее 10 узлов змей быстро поднимался на высоту около 250 ярдов, предоставляя стрелкам возможность отработать навыки наведения и определить результативность попаданий по видимым повреждениям конструкции.
Также существовало более радикальное и в то же время более опасное решение: буксировака мишени самолетом. Стрельба велась боевыми снарядами, без защиты от дурака, поэтому вся надежда была на то, что расчёт не перепутает буксир с мишенью или не даст слишком большое упреждение.
Качественный прорыв в методах подготовки произошел с появлением камеры Hythe — устройства, которое полностью имитировало пулемет Льюиса, но вместо боеприпасов использовало фотопленку. Конструкция камеры в точности повторяла габариты, вес и органы управления настоящего оружия. Когда стрелок нажимал на спуск, срабатывал фотографический затвор, фиксируя изображение цели в момент "выстрела".
Эта концепция позволила инструкторам проводить детальный анализ ошибок курсантов после завершения тренировки. Проявленные снимки наглядно демонстрировали точность прицеливания, правильность взятия упреждения и общее качество работы стрелка. Камера Hythe использовалась как в наземных установках противовоздушной обороны, так и на борту самолетов для отработки воздушных боев.
В 1934 году появилась камера Williamson G.22, предназначенная для установки на крыльях истребителей. Пилот мог дистанционно активировать устройство через кабельную систему, фотографируя цели в момент стрельбы из бортового вооружения.
С началом Второй мировой войны и угрозой германского вторжения в Великобританию потребность в эффективной подготовке зенитчиков приобрела критическое значение. Британская промышленность быстро переориентировалась на военные нужды. Компания Houghton-Butcher, известная производством фотоаппаратов серии Ensign, адаптировала конструкцию Williamson G.22 для нужд сухопутных войск.
Результатом этой работы стала учебно-контрольная зенитная камера, которая устанавливалась непосредственно рядом с орудием, а не заменяла его, как в случае с камерой Hythe. Такая компоновка открывала дополнительные возможности: устройство могло документировать не только учебные стрельбы, но и реальные боевые действия, фиксируя попадания по вражеским самолетам.
Учебно-контрольная зенитная камера представляла собой высокотехнологичное для своего времени устройство. Конструкция использовала стандартную фотопленку типа 120, на выходе получались квадратные кадры 6х6см. Объективы использовались производства фирмы Dallmeyer, в частности модель "Dallon".
Особого внимания заслуживает система спуска и продвижения пленки. Массивный металлический тросик, выполненный в форме пистолетной рукояти, соединялся с камерой через систему тросов Bowden — тот же принцип, что применяется в велосипедных тормозах.
Вращение механизмов внутри камеры при натяжении тросов обеспечивало как срабатывание затвора, так и перевод пленки на следующий кадр. Рукоять оснащалась счетчиком кадров для контроля расхода пленки.
Затвор камеры имел уникальную конструкцию, напоминающую венецианские жалюзи. Четыре отдельные лопасти одновременно поворачивались в горизонтальное положение.
Камера предлагала три режима работы затвора: выдержка 1/50 секунды для стандартной съемки, режим ручной выдержки и режим фиксации затвора в открытом положении до повторного нажатия на спуск. Автоматическая крышка объектива, связанная с механизмом затвора, защищала оптику между снимками.
В камере была встроенная система записи метаданных — функция, редко встречавшаяся в фотоаппаратуре того времени. Устройство содержало отдельный отсек с батареей, питавшей небольшую лампочку в боковом отделении камеры. При срабатывании затвора лампа на мгновение вспыхивала и подсвечивала белую табличку.
Через специальную оптическую систему изображение этой таблички проецировалось на край фотографического кадра. Операторы могли заранее написать на табличке необходимую информацию: дату съемки, имя наводчика, позицию орудия или другие служебные данные. Эта информация автоматически экспонировалась на негатив, создавая неразрывную связь между изображением и обстоятельствами его получения.
Однако при одинарном срабатывании лампочки метаданные обычно получались недоэкспонированными.
Благо, конструкция фотоаппарата допускал мультиэкспозицию метаданных: если в основной камере затвор то пропускает то преграждает световой поток, то в отсеке с лампочкой затвора нет. Просто там полная темнота, кроме тех моментов, когда лампочка мигает. Также спусковой механизм не имеет механической связи с затвором до тех, пока он не взведён; и не связан с транспортировочным механизмом. Однако связан с работой лампочки - она вспыхивает на каждое нажатие на спуск независимо от статуса затвора и плёнки. Тем самым можно сильнее и сильнее экспонирновать тот угол кадра, в котором отображается текстовая информация.
Непосредственно перед плоскостью пленки располагалась стеклянная пластина с координатной сеткой.
Центральная сетка-прицел и градусные деления по краям кадра позволяли точно определять угловое отклонение цели от оси прицеливания. Анализ таких снимков давал инструкторам объективную информацию о качестве наведения орудия и помогал выявлять систематические ошибки в работе расчета.
Камера поставлялась в прочном деревянном ящике, общий вес 11 килограммов. При этом переносная ручка ящика сделана из верёвки.
Внутренняя сторона крышки содержала металлическую табличку с выгравированными инструкциями по эксплуатации устройства.
Появление столь сложных тренировочных устройств отражало общую тенденцию к научному подходу в организации противовоздушной обороны. Битва за Британию превратила зенитную артиллерию в высокотехнологичную отрасль военного дела. Артиллерийские расчеты использовали сложные аналоговые компьютеры для определения параметров цели и расчета упреждения.
Женщины-операторы обслуживали приборы, измерявшие высоту, скорость и направление движения вражеских самолетов. На основе этих данных вычислялись углы наведения орудий и время срабатывания взрывателей снарядов. Учебно-контрольная зенитная камера дополняла эту систему, обеспечивая подготовку персонала к ближнему бою, когда расчеты орудий полагались на механические прицельные приспособления.
Британские военные разработали целую экосистему тренировочных устройств. Купольные тренажеры представляли собой передовые для того времени симуляторы: внутри больших куполообразных строений на стены проецировались кинокадры с атакующими самолетами. Курсанты размещались в центре с макетами орудий и "вели огонь" по движущимся проекциям, а специальная система оценивала точность "попаданий".
Учебно-контрольная зенитная камера стала частью комплексной многоуровневой системы подготовки, направленной на максимальное повышение квалификации зенитных расчетов. Хотя эффективность зенитной артиллерии в плане непосредственного уничтожения вражеских самолетов оставалась относительно низкой, она оказывала психологическое воздействие и принуждала бомбардировщики к выполнению противозенитных маневров, чем существенно снижала точность бомбометания.
Современные испытания сохранившихся экземпляров камеры подтверждают, что она может оставаться пригодной к использованию на протяжение десятилетий даже при отсутствии обслуживания. Несмотря на некоторое замедление работы затвора на стандартной выдержке, а в холодную погоду - застревание его "жалюзей" в открытом положении, получить нормальные фотографии с камеры возможно. Производителем заявляется, что объектив сфокусирован на бесконечность, но фактически глубина резкости находится где-то на отметке 200 метров, что, вероятно, камера унаследовала от своего авиационного предка - самолеты в среднем открывали огонь по цели как раз с такого расстояния.
Сей фотоаппарат является наглядным примером того, как гражданские технологии адаптировались для решения специфических задач военного времени. В эпоху, когда выживание нации зависело от эффективности противовоздушной обороны, даже фотокамера являлась оружием.
Скорее всего все видели в интернетах картинки с экранами под микроскопом, разбавлю этот список своими.
Монитор 27" 1920x1080 (часть фотографий была сделана на втором с 24"), фотографировалось на Samsung A15 по причине отсутствия микроскопа.
Видно RGB структуру субпикселей (иногда встречается BGR), а если отойти или уменьшить масштаб, то легко разобрать, что изначально было нарисовано.
Комментарий не требуется
Шрифт с субпиксельным сглаживанием (ClearType). Шрифт отрисовывается с разрешением по горизонтали втрое выше, после чего 3 виртуальных пикселя по горизонтали упаковываются в 3 субпикселя одного настоящего пикселя, тем самым давая иллюзию втрое большего разрешения.
Шрифт без субпиксельного сглаживания. Выглядит заметно более топорным и неаккуратным (особенно 'д'), но зато лишен оранжево-голубых переливов.
Многие телефонные матрицы (особенно OLED, у них еще бывает четвертый - белый субпиксель, чтобы улучшить цветопередачу и снизить выгорание) вместо равного деления 1 пикселя на 3 субпикселя используются специфичные и нестандартные способы их распределения (PenTile, к примеру). К сожалению, на всех моих устройствах высокая плотность, чтобы я мог получить разборчивый результат.