Процесс построения кривой Коха выглядит следующим образом: берём единичный отрезок, разделяем на три равные части и заменяем средний интервал равносторонним треугольником без этого сегмента. В результате образуется ломанная, состоящая из четырёх звеньев длины 1/3.
На следующем шаге повторяем операцию для каждого из четырёх получившихся звеньев. Предельная кривая и есть кривой Коха.
На следующем шаге повторяем операцию для каждого из четырёх получившихся звеньев. Предельная кривая и есть кривой Коха.
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
var imgData = ctx.createImageData(canvas.width, canvas.width);
function index(y, x, c) {
var w = canvas.width;
return (y * w + x) * 4 + (c || 0);
}
function draw(w, h, sx, sy) {
var i;
var j;
var t;
var mx = 0;
var my = 0;
var r = 500;
var x;
var y;
for (i = 0; i < 50000; i++) {
t = mx;
if (Math.random() <= 1/2) {
mx = 1/2 * mx + 1/(2*Math.sqrt(3)) * my;
my = 1/(2*Math.sqrt(3)) * t - 1/2 * my;
} else {
mx = 1/2 * mx -1/(2*Math.sqrt(3)) * my + 1/2;
my = -1/(2*Math.sqrt(3)) * t - 1/2 * my + 1/(2*Math.sqrt(3));
}
x = sx + Math.round(r * mx);
y = sy - Math.round(r * my);
imgData.data[index(y, x, 0 )] = 255;
imgData.data[index(y, x, 3 )] = 255;
}
ctx.putImageData(imgData, x, y);
}
draw(canvas.width, canvas.width, 0, 150);