Просто пузыри

По древней легенде, прекрасная Афродита родилась из морской пены. Как и во многих древних мифах, в этой красивой сказке скрыт глубокий космогонический смысл. В пене действительно есть что-то тайное, метафизическое. Попробуйте пристально вглядеться в структуру пены (для этого, например, можно использовать бокал пива или поролоновую губку). В этих эфемерных трехмерных кружевах интуитивно угадываются некие базовые проэлементы будущих клеточных тканей живых организмов. Именно пена, которая образовывалась на поверхности первичного океана Земли миллиарды лет назад, послужила той изначальной субстанцией, из которой впоследствии возникла жизнь. Этот процесс физико-химической самоорганизации продолжался многие миллионы лет и занял гораздо больше времени, чем вся последующая биологическая эволюция. Древняя пена постепенно усложнялась, обогащалась сложными химическими веществами, обретала способность к самовоспроизведению, дыханию и, наконец, ожила. Представить себе величественный космический процесс становления жизни можно, обратившись к удивительной живописной серии известного литовского композитора и художника Чурлёниса. По признанию самого автора, он собирался работать над этой серией всю свою жизнь. Рисунки объединены под общим названием "Сотворение мира" и отображают различные стадии эволюции от первичного сгустка космической плазмы до образования ростков жизни в древнем, возможно, неземном, планетарном океане (ознакомиться с серией "Сотворение мира" можно по адресу neris.mii.lt/art/ciurlionis/creation/cretion.html).

Такой поток ассоциаций нахлынул на меня после посещения очень интересного сетевого ресурса под названием "Арбуз или угощение для технической интеллигенции" (www.arbuz.narod.ru). Читателям, интересующимся различными занимательными математическими феноменами и программированием, я настоятельно рекомендую посетить этот адрес - не пожалеете. В числе прочего на сайте выложена и страничка о пузырях и пене. Идея алгоритма проста. Вначале случайным образом разыгрывается некоторое заданное количество точек на участке плоскости. Это центры будущих пузырей. Далее последовательно для каждой точки строящегося изображения вычисляются расстояния от нее до всех центров. Из них выбирается наименьшее, и, в зависимости от его значения, точка окрашивается в соответствующий тон. В результате получается некое подобие пены. В программе, выложенной на сайте, включен дополнительный цикл для пузырьковой сортировки (в данном случае термин "пузырьковая сортировка", как вы понимаете, никак не связан с обсуждаемой темой) расстояний. Это, по-моему, будет здорово замедлять работу программы с ростом количества пузырей. Поэтому я переписал программный код следующим образом:

Dim i As Byte
Dim n As Byte
Dim x_bubble(100) As Integer
Dim y_bubble(100) As Integer
Dim x As Integer
Dim y As Integer
Dim r(100) As Single
Dim r_min As Single
Dim PointColor As Long
Private Sub Form_Click()
 Cls
 Randomize
 n = 25
 For i = 1 To n
  x_bubble(i) = Rnd * 500
  y_bubble(i) = Rnd * 500
 Next i
 For x = 1 To 500
  For y = 1 To 500
   r_min = 2000
   For i = 1 To n
    r(i) = Sqr((x_bubble(i) - x) ^ 2 + (y_bubble(i) - y) ^ 2)
    If r_min > r(i) Then r_min = r(i)
   Next i
   PointColor = RGB(255 - Int(r_min), 255 - Int(r_min), 255 - Int(r_min))
   PSet (x, y), PointColor
  Next y
 Next x
End Sub

Варьируя коэффициенты при различных цветовых компонентах в функции RGB, можно получать пену различных цветовых оттенков. Если же изменять количество исходных центров пузырей, то итоговая пена будет получаться различной степени насыщенности. С помощью приведенного программного фрагмента я получил несколько загадочных изображений, напоминающих не то молекулы, не то кладки икры инопланетной твари. Одно из них я даже сделал покрытием для рабочего стола. Как это ни парадоксально, но у многих людей эти картинки вызывают некие устойчивые эротические ассоциации. Не правда ли, напоминает известный анекдот о том, как пациент спрашивает у доктора, демонстрирующего ему психологические тесты в виде квадратов и треугольников: "Доктор, а откуда у вас такие неприличные картинки?".

А. КОЛЕСНИКОВ,
[email protected]

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

Номер: 

08 за 2002 год

Рубрика: 

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

Комментарии

Аватар пользователя Пью
Забавные фигурки. Похожи на задницы
Аватар пользователя Piligrim
Некоторые и на кирпич глядя о п..... думают!