Снежинка Коха
2009-03-02 22:07![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Фрактальная снежинка Коха — в комментариях попросили нарисовать в Математике.
Берем правильный треугольник, каждую сторону делим на 3 части. Средний отрезок выбрасываем, а вместо него вставляем два таких же, соединенных «уголком». На первом шаге получается «звезда Давида». Повторяем процедуру с ней. С получившейся кривой — опять повторяем. Если повторять до бесконечности, то длина кривой будет расти до бесконечности, хотя площадь внутри кривой ограничена сверху.
На рисунке первые 5 шагов. Чтобы было понятно, как она строится, каждый раз снежинка «вырастает» в полтора раза и перекрашивается.

Исходный код, Mathematica 6.0. Сделан на основе R. Maeder. Generating the Koch Snowflake with Mathematica, 1992..
Хозяйке на заметку: если будете экспериментировать с функцией KochFlake[], замените size в аргументе Partition[] на 1.0 * size, либо всегда передавайте плавающее число для аргумента size, как это делаю я в данном примере. Операции с плавающими числами Mathematica исполняет значительно быстрее, чем с корнями и рациональными — в данном случае примерно в 10 раз.
Берем правильный треугольник, каждую сторону делим на 3 части. Средний отрезок выбрасываем, а вместо него вставляем два таких же, соединенных «уголком». На первом шаге получается «звезда Давида». Повторяем процедуру с ней. С получившейся кривой — опять повторяем. Если повторять до бесконечности, то длина кривой будет расти до бесконечности, хотя площадь внутри кривой ограничена сверху.
На рисунке первые 5 шагов. Чтобы было понятно, как она строится, каждый раз снежинка «вырастает» в полтора раза и перекрашивается.
Исходный код, Mathematica 6.0. Сделан на основе R. Maeder. Generating the Koch Snowflake with Mathematica, 1992..
KochFlake[order_, size_] := Nest[ (#1 /. Line[{start_, finish_}] :> Block[{normal, vec}, vec = finish - start; normal = Reverse[vec] * {-1, 1} * Sqrt[3]/6; { Line[{start, start + vec/3}], Line[{start + vec/3, start + vec/2 + normal}], Line[{start + vec/2 + normal, start + 2 vec/3}], Line[{start + 2 vec/3, finish}] } ])&, Line /@ Partition[size * {{0, 1},{Sqrt[3]/2, -1/2},{-Sqrt[3]/2, -1/2}}, 2, 1, {1, 1}], order]; Graphics[{Darker[Hue[#/6]], KochFlake[#, 1.5^#]} & /@ Range[0, 4], AspectRatio -> Automatic, ImageSize -> {420, Automatic}]
Хозяйке на заметку: если будете экспериментировать с функцией KochFlake[], замените size в аргументе Partition[] на 1.0 * size, либо всегда передавайте плавающее число для аргумента size, как это делаю я в данном примере. Операции с плавающими числами Mathematica исполняет значительно быстрее, чем с корнями и рациональными — в данном случае примерно в 10 раз.
(no subject)
2009-03-03 06:56 (UTC)(no subject)
2009-03-03 07:33 (UTC)(no subject)
2009-03-03 07:20 (UTC)(no subject)
2009-03-03 07:35 (UTC)(no subject)
2009-03-03 07:39 (UTC)(no subject)
2009-03-03 09:14 (UTC)(no subject)
2009-03-03 11:09 (UTC)(no subject)
2009-03-03 11:35 (UTC)(no subject)
2009-03-03 11:39 (UTC)Да, у них тоже принимают.
(no subject)
2009-03-07 13:04 (UTC)Офигеть!
2009-03-03 08:17 (UTC)Re: Офигеть!
2009-03-03 23:14 (UTC)(no subject)
2009-03-04 20:05 (UTC)(no subject)
2009-03-03 09:15 (UTC)(no subject)
2009-03-03 23:18 (UTC)(no subject)
2009-03-12 20:41 (UTC)http://www.contextfreeart.org/
Там все фрактальное рисуется гораздо элегантнее.
(no subject)
2009-03-12 20:43 (UTC)(no subject)
2009-03-12 21:12 (UTC)Она сама есть реализация математического объекта - контекстно-свободной грамматики.
И умеет удивительные вещи.
(no subject)
2009-03-12 21:17 (UTC)(no subject)
2009-04-12 16:18 (UTC)(no subject)
2009-04-12 20:41 (UTC)(no subject)
2009-12-03 17:08 (UTC)(no subject)
2009-12-03 22:57 (UTC)*________о
Одна вершина (звездочка — включенная точка, о - «выколотая»). Треугольник сложен из трех таких штук без перекрытия. По построению, эта сторона заменяется на
*___/\___о
Четыре вершины. На каждом шаге одна вершина превращается в 4. Дальше додумаете?
(no subject)
2011-12-06 20:46 (UTC)