понедельник, 1 апреля 2013 г.

Треугольник Серпинского

 Треугольник Серпинского представляет из себя множество точек плоскости, построенное следующим образом:
  1. Берем обычный треугольник.
  2. Вырезаем из него треугольник, вершины которого лежат на серединах сторон исходного. В результате на плоскости получаем три треугольника, площадь каждого из которых в четыре раза меньше площади исходного.
  3. С полученными треугольниками проделываем предыдущие манипуляции.
Выглядит процесс так:



  1. Интересно, что если в треугольнике Паскаля все нечетные числа окрасить в один цвет, а четные в другой, то образуется треугольник Серпинского.

Этим фактом и воспользуемся. Только в Excel удобней использовать не классический (построчный) вид треугольника Паскаля, а такой:




Здесь биномиальные коэффициенты выписаны по диагонали, в первой заполненной строке и первом заполненном столбце единицы, а в остальных сумма вехнего и левого элемента.

Перейдем к построению. Для нас достаточно выписывать не коэффициенты, а только их четность.

Для начала сделаем размер ячеек в Excel, к примеру 7 на 7 пикселей.

Станем в ячейку B2, затем выделим область B2:DY129 - для этого нажимаем Ctrl + G и в поле ссылка пишем  B2:DY129.

Теперь в строке формул пишем =ЕСЛИ(ИЛИ(СТРОКА()=2;СТОЛБЕЦ()=2);1;ОСТАТ(A2+B1;2))
и нажимаем Ctrl + Enter, чтобы заполнить подобной формулой всю выделенную область.

Заходим Меню - Условное форматирование и для значения 1 указываем цвет ячейки.

В итоге получаем:


Следует отметить, что треугольник Серпинского получается при некоторой разновидности случайного блуждания на плоскости. А именно:
  1. Зафиксируем на плоскости 3 вершины треугольника и возьмем еще одну точку. 
  2. Первую точку получим как середину отрезка между случайно выбранной вершиной и точкой из п.1. 
  3.  Вторую точку получим как середину отрезка между случайно выбранной вершиной и первой точкой.  
  4. ...
  5. Повторяем процесс много раз.
Можно ипользовать такой макрос:


Public Sub Макрос()

Dim arRange(1 To 3) As Range
Dim tekRow As Integer
Dim tekColumn As Integer
Dim i As Integer
Dim iT As Integer

tekRow = Int(1000 * Rnd) + 1
tekColumn = Int(200 * Rnd) + 1

Set arRange(1) = Cells(1, 1)
Set arRange(2) = Cells(50, 250)
Set arRange(3) = Cells(200, 20)

Cells.Clear

For i = 1 To 20000
   iT = (Int(1000 * Rnd) Mod 3) + 1
   tekRow = Int((tekRow + arRange(iT).Row) / 2)
   tekColumn = Int((tekColumn + arRange(iT).Column) / 2)
   Cells(tekRow, tekColumn).Interior.ColorIndex = 5
Next

End Sub


Подробнее об этом и некоторых других свойствах можно прочитать в статье "Треугольник Серпинского".


Похожие по тематике посты - еще почитать:

Комментариев нет:

Отправить комментарий