По горячим следам заметки про радугу хочу поделиться некоторыми деталями расчёта рассеивания света на каплях воды. Эта статья играет роль приложения к предыдущему рассказу для особо любопытных.
Напомню, что геометрические алгебры, или алгебры Клиффорда, позволяют оперировать подпространствами — точками, прямыми, плоскостями, — как числами. При этом, наряду со сложением и умножением используется ряд специфических операций: внешнее, внутреннее и регрессивное произведения, а также сопряжение и три инволюции. Всё они имеют тот или иной геометрический смысл и позволяют производить базовые геометрические построения.
Мы будем работать в двумерной двойственной проективной геометрической алгебре, которую принято обозначать PGA² или R*(2,0,1). Она строится с помощью трёх генераторов e₀, e₁ и е₂ и имеет базис из восьми элементов:
Прямые в этой алгебре представляются как векторы, а точки — как бивекторы:
Координаты точки выражаются в однородных координатах, как это принято в проективной геометрии. Для перехода к обычным плоским координатам, надо, если можно, разделить координаты a и b на число c.
В качестве иллюстративного справочника, приведу простой чертёж, показывающий смысл различных произведений:
- Регрессивное произведение двух точек — прямая проходящая через эти точки.
- Внешнее произведение двух прямых — точка их пересечения.
- Внутреннее произведение точки и прямой — прямая ортогональная прямой, проходящая через точку.
Кроме обычных точек и прямых в проективной геометрии есть ещё идеальные объекты. Идеальная прямая — это линия горизонта, она задаётся числом e₀. Пересечение идеальной прямой с любой другой будет идеальной точкой. Её алгебраическое представление — сумма ae₀₁ + be₀₂ соответствует направлению вектора (a, b). В этой же точке будут пересекаться все параллельные прямые, имеющие это же направление. На чертеже идеальные точки, вернее, соответствующие им направления, показаны стрелками. Таким образом, в проективной геометрии все без исключения пары прямых имеют точку пересечения, либо обычную, либо идеальную.
Кроме приведённых выше операций между элементами геометрической алгебры, мы рассматривали три базовых преобразования: отражение, поворот и сдвиг. В геометрической алгебре они выражаются с помощью сопряжения.
Повороты и сдвиги мы обычно выражаем через углы и векторы. В этом случае для сопряжения формируются специальные бивекторы:
Здесь P это ось вращения (точка в двумерном случае), а v -- прямая, задающая направление сдвига. Обратите внимание на то, что сдвиг выражается, как поворот на d/2 вокруг идеальной точки.
В двумерной геометрии, где плоскость вращения единственная, поворот можно выразить проще как произведение:
Имея весь этот инструментарий, мы можем приступить к решению задачи о распространении светового луча, встречающего на своём пути каплю воды. Она распадается на маленькие подзадачи:
- Найти точку пересечения луча и окружности (границы капли) и нормаль к границе капли в этой точке.
- Вычислить отраженный луч.
- Вычислить преломленный луч с учётом коэффициента преломления для воды.
- Повторить эти вычисления для луча, распространяющегося внутри капли.
Точки пересечения прямой и окружности можно найти, решая систему уравнений на координаты. Но я хочу показать геометрическое решение, применив универсальные приёмы характерные, для геометрической алгебры.
Расщепление луча на отражённый и преломлённый определяется углом, который этот луч образует с нормалью к окружности в точке пересечения прямой и окружности. Собственно, только нормаль в этой точке нам и понадобится, а тригонометрию и решение уравнений возьмёт на себя геометрическая алгебра.
Для прямой l и окружности радиуса r с центром O, нормали в точках их пересечения можно найти, поворачивая перпендикуляр к прямой l, проходящий через центр окружности, на угол, определяемый расстоянием между центром окружности и прямой l:
Как известно, угол отражения равен углу падения. Имея нормаль в точке пересечения луча и окружности, мы можем отразить относительно неё наш луч, поменяв его направление.
Закон Снеллиуса гласит, что преломлённый луч входит в среду под углом, синус которого равен синусу угла падения, умноженному на коэффициент преломления среды μ. Искомый синус появляется во внешнем произведении луча и нормали, то есть, в выражении для точки пересечения прямой с окружностью P:
Здесь мы предполагаем, что обе прямые нормированы, а P с шапочкой обозначает некий нормированный бивектор. Теперь преломлённый луч можно получить, повернув нормаль относительно точки P на нужный угол, используя "готовый" синус, просто умножив его на показатель преломления:
При выходе из капли не меняется ничего, кроме показателя преломления, который заменяется на 1/μ. При этом под корнем может оказаться отрицательное значение, что соответствует полному внутреннему отражению и отсутствию преломлённого луча.
Вот, собственно, и все вычисления. Осталось только повторить их многократно (тысячи раз) и сформировать из тысяч лучей каустики. Радужная картинка получена из результатов расчётов для лучей с разными коэффициентами преломления, которые были распределены по соответствующим цветовым каналам.