Математические формулы ТеX в SVG
Оказывается вовсе не обязательно вставлять -овскую математику в вебе также как это делалось в 1999 году — в виде гифов с прозрачным фоном. Будущее уже давно наступило, теперь можно использовать векторный SVG.
Это я вот к чему. Недавно, обзаведясь Макбуком с Retina-дисплеем проблема растровой графики в вебе у меня всплыла в полный рост: если раньше, когда часть какой-нибудь странички была отрисована, скажем, фотошопом, а часть средствами CSS, то просто глаз слегка спотыкался на этой разнице, но терпимо было. А на ретине разница становится уже жуткой — растровые части сайтов выглядят как набор больших пикселей.
И если на других сайтах это проблемы их создателей, то на моем собственном блоге (да, да, пишу я в него реже чем ковыряю его движок и дизайн) меня такая разница не устраивала совершенно, и больше всего у меня она видна как раз на вставленных математических формулах.
Полез разбираться как бы математику в SVG рендерить, оказалось что человечество эту проблему давно решило, и есть утилитка dvisvgm ровно для этого и предназначенная. Я вызываю ее так:
|
|
Все, на выходе some.svg замечательно выглядящий на ретине.
Наглядная разница между растром и вектором для математики (привет всем владельцам ретина-дисплеев). Растр:
Вектор:
Кстати, чтоб два раза не вставать, сэкономлю кому-нибудь пару часов на разбирательство. У всей математики у меня в блоге вот такой шаблон:
|
|
Аттрактор Лоренца
Развлекаюсь с анимацией на HTML5 canvas. Написал вот такую чудесную визуализацию аттрактора Лоренца:
При открывании в новом окне, не забудьте что браузер можно перевести в полноэкранный режим, нажав F11. Так смотрится ещё лучше.
То что вы тут видите, представляет собой анимацию решения системы следующих дифференциальных уравнений:
Где ,
,
— текущее состояние системы,
— время,
,
,
— параметры системы.
В моём примере:
Для каждой линии (представляющей собой отдельное решения уравнения) я выбираю начальное значение с добавлением небольшого случайного числа. Таким образом очень хорошо заметен «эффект бабочки»: незначительное возмущение системы («взмах крыла бабочки») приводят к очень большим изменениям в дальнейшем, линии «вылетающие» из очень близких точек вскоре начинают демонстрировать совершенно разное поведение.
Мандельбульба (Mandelbulb)
Совсем-совсем недавно (меньше года назад!), был открыт очень интересный новый фрактал — Мандельбульба (Mandelbulb). Открыли его два математика: Даниэль Уайт (Daniel White) и Поль Ниландер (Paul Nylander). Они использовали гиперкомплексную алгебру, основанную на сферической системе координат. Алгебра оперирует трёхэлементными числами, соответствующими координатам точки в трехмерном пространстве. Для этих чисел (вида ) определены операции возведения в степень:
где
И операция поэлементного сложения.
С помощью этих двух операций можно построить трехмерный аналог множества Мандельброта, воспользовавшись известной формулой , где
и
— числа в нашей алгебре. Трехмерная точка
принадлежит множеству, если процесс
для
остается ограниченным (не «улетает» в бесконечность). При реализации следует обратить внимание, что для вычисления
необходимо использовать двухаргументную функцию atan2(a,b), которая есть практически в любом распространенном языке программирования.
Ниже приведена моя картинка для мандельбульбы 8-го порядка
при 5 итерациях, нарисована с помощью очень простого трассировщика лучей:
Кручёнка
Параметрические поверхности страсть как хороши!
Обои для рабочего стола с этой картинкой
Специально для фанатов математики, формула этой поверхности:
Простые числа. Решето Эратосфена
Это статья посвящена простым числам и эффективным способам их вычисления. Сразу скажу, что те алгоритмы, которые тут приведены, являются весьма и весьма нетривиальными и самому мне не давались довольно долго, но в итоге я их всё-таки придумал, написал и спешу поделиться со всеми вами. Исходные тексты в статье будут приведены на языках C# и Haskell.
Простое число – это натуральное число больше единицы, которое имеет ровно два делителя: единицу и само это число.
Решето Эратосфена – древний, но при этом весьма эффективный и до сих пор широко используемый алгоритм поиска всех простых чисел не превосходящих некоторого N.
Запишем подряд все числа от 2 до N. Дальше вычеркнем из этого списка все числа кратные 2, исключая саму двойку, потом вычеркнем все числа кратные 3, исключая само число 3, число 4 уже вычеркнуто, вычеркиваем числа кратные 5 и т.д. Продолжаем этот процесс, пока квадрат очередного числа не превысит N.
Самая простая программная реализация этого алгоритма выглядит следующим образом: