Фигуры в криволинейных координатах

Кроме привычной нам прямоугольной декартовой системы координат, в математике используются и другие способы задания положения точки в пространстве или на плоскости. Чаще всего применяются полярные, цилиндрические и сферические координаты. Все эти системы родственны. В них присутствует центральная точка или полюс, от которого расходятся концентрические окружности (полярная система координат), цилиндры (цилиндрическая система) или сферы (сферические координаты). Положение точки определяется при помощи луча, выходящего из полюса и пересекающего в заданном месте соответствующую окружность, цилиндр или сферу. В такие координаты очень естественно укладываются многие природные формы. Например, если вновь открыть уже упоминавшийся атлас Геккеля, то многие из изображенных там организмов легко можно поместить в одну из этих систем координат, а затем и подобрать математическое выражение, описывающее их внешние контуры. Перечисленные криволинейные системы координат идеально приспособлены для отображения форм, построенных вокруг единой центральной точки. Такая организация характерна для многих биологических объектов. Их формы порой самым удивительным образом напоминают фигуры, образуемые в криволинейных координатах достаточно простыми и лаконичными математическими выражениями. Это сходство указывает на то, что тела живых организмов, биологические структуры, образуются по принципам, сходным с принципами построения "полярных" объектов. Живой организм "начинается" из одной исходной точки, и затем развивается и растет во все стороны по определенному математическому закону. По крайней мере такое предположение совсем не противоречит наблюдаемому в природе обилию "математических", "полярных" форм. Природа как бы сама использует полярные координаты, что особенно бросается в глаза на примере растений, примитивных многоклеточных животных и насекомых. Вероятно поэтому фигуры, построенные в полярных координатах, обладают неповторимой эстетической привлекательностью. Они плотно ассоциируются с формами цветов, бабочек, словом, всем тем, что так много удовольствия доставляет нашему взору в живой природе.

В полярной системе координат положение точки определяется полярным радиусом r и углом j, образуемым полярным радиусом с полярной осью. Если в декартовой системе координат предельно простое выражение y=kx определяет прямую линию, то это же выражение, переписанное в форме r=kj, уже превращается в спираль. Фигуры в полярных координатах образуются как след конца бегающего по кругу полярного радиуса переменной длины. Длина полярного радиуса определяется величиной угла, который в данный момент времени он образует с полярной осью. В цилиндрической системе к полярному радиусу и углу добавляется еще одна координата - z, которую можно интерпретировать как высоту точки над плоскостью, в которой вращается полярный радиус.

В основу программы построения кривых в полярных координатах, приведенной на врезке, положено циклическое изменение угла j. Для каждого нового значения угла в подпрограмме-функции по заданной формуле вычисляется значение r. В точке, соответствующей заданному углу и вычисленной длине полярного радиуса высвечивается пиксель того или иного цвета. Наиболее эффектно выглядят не единичные графики, а целые семейства кривых, порождаемых выражениями с параметрами. Например, фигура, приведенная на первом рисунке, представляет собой семейство кривых, полученных при помощи уравнения r=A(1+cos(3j)+B(sin(3j))2 (см. книгу Котов Ю.В. Как рисует машина. - М.:Наука, 1988.). Построение производилось путем варьирования параметра А (параметр В принимал фиксированное значение).

Dim r As Byte
Dim g As Byte
Dim b As Byte
Dim i As Integer
Dim j As Integer
Dim Rmax As Single
Dim Ro As Single
Dim fi As Single
Function f(fi As Single, a As Single) As Single
f = 2 * (1 + Cos(fi))
End Function
Sub Screen_click()
screen.Cls
Rmax = Text1.Text
pi = 3.141593
For fi = 0 To 2 * pi Step 0.001 * pi
  Ro = f(fi, a)
  x = Ro * Cos(fi)
  y = Ro * Sin(fi)
  i = 300 * (x + Rmax) / (2 * Rmax)
  j = 300 - 300 * (y + Rmax) / (2 * Rmax)
  ...
  screen.PSet (i, j), RGB(r, g, b)
Next fi
End Sub

Цвет в программу можно добавлять "по вкусу". Для вычисления значений байтовый цветовых переменных r, g и b возможны различные способы (избранный алгоритм следует вставить в программу вместо многоточия). Интересные цветовые эффекты получаются, если поставить значения цветовых компонент в зависимость от r.

Для визуализации структур, заданных в цилиндрических координатах, я использовал программу, описанную в КВ №2, 13-19 января 2000 года. Необходимо лишь добавить в подпрограмму-функцию обратное преобразование декартовых координат в цилиндрические, а затем вычислить значение z по той или иной "цилиндрической" формуле.

Public Function f(x As Single, y As Single) As Single
ro = Sqr(x ^ 2 + y ^ 2)
fi = Atn(y / x)
cosfi = x / ro
sinfi = y / ro
f = (1 - (cosfi) ^ 2 / (ro)) ^ 2
End Function

В текст основной процедуры следует добавить ввод значения Rmax. После проделанных преобразований программа будет отображать зависимость переменной z от полярного радиуса и угла.

Варьируя алгоритмы раскраски компьютерных изображений, можно добиться впечатляющего сходства математических кривых с реально существующими живыми объектами, а можно, напротив, изобрести что-то совершенно новое, но не менее прекрасное. Получаешь истинное удовольствие, наблюдая за тем, как в бархатной тьме экрана постепенно появляется еле заметное темно-синее свечение, которое постепенно распространяется от центра, превращаясь в лепестки. По мере роста они становятся сначала сиреневыми, затем ярко красными, а по краям снова окрашиваются темно-синим. Еще более разнообразные и интересные изображения получаются в опытах с цилиндрическими координатами. Здесь мы имеем дело уже не с семейством кривых на плоскости, а с объемными структурами. Например, вывернутый (в цветном изображении золотой) диск на втором рисунке представляет собой фрагмент графика функции z = (cosfi ^ 2 / ro) ^ (Int(ro) + 1). В общем простор для фантазии и экспериментов в этой области огромен. Весьма незначительные усилия по разработке несложного программного обеспечения сторицей окупаются чрезвычайно эффектными результатами. Попробуйте и убедитесь сами! Если в процессе своих исследований наткнетесь на что-то заслуживающее внимания - присылайте.

А.КОЛЕСНИКОВ,
andr61@mail.ru

Версия для печатиВерсия для печати

Номер: 

33 за 2000 год

Рубрика: 

Азбука программирования
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!