Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском».
Закрыт 10 месяцев назад.
Задача: Изобразить следующий фрактал
Насколько я понял, суть заключается в пятиугольниках. Создаётся пятиугольник, затем его более увеличенная версия, внутри которой находится 5 штук более мелких и т.д. А звезда формируется само собой.
Допустим создать пятиугольник, или же 5 пятиугольников вокруг 1 точки - не проблема, но как это сделать рекурсией, да ещё и как на рисунке - ума не приложу
Предположу что:
повторяем процедуру рекурсивно сколько нужно раз
Profit
интересная ссылка
P.S: вот результат четырех итераций предложенного мной алгоритма
А вот и сам алгоритм, я его расширил чтобы можно было рисовать родственные фракталы
<input id="shape" type="range" min="3" max="9" value="5" onchange="draw()">
<input id="iterarions" type="range" min="1" max="5" value="3" onchange="draw()">
<span></span><br>
<canvas width=1000 height=600 style="height:80vh"></canvas>
<script>
let canvas = document.querySelector('canvas');
let ctx = canvas.getContext('2d');
draw();
function draw() {
ctx.clearRect(0,0,canvas.width, canvas.height);
let t = new Date().getTime();
let lines = fractal([[[10, 599], [980, 599]]], 0);
lines.forEach(l => drawLine(l[0], l[1]))
t = new Date().getTime() - t;
document.querySelector('span')
.textContent = ' segments: '+lines.length+', time ' + t +' ms';
}
function fractal(bases, i) {
if (i === +document.querySelector('#iterarions').value)
return bases;
let n = +document.querySelector('#shape').value;
let cs = Math.cos((180*(n-2))*Math.PI/180/n);
let sn = Math.sin((180*(n-2))*Math.PI/180/n);
let result = [];
bases.forEach(base => {
let x0 = base[0][0], y0 = base[0][1];
let x1 = base[1][0], y1 = base[1][1];
let dx3 = x1/3-x0/3, dy3 = y1/3-y0/3;
let sublines = [];
sublines.push([[x0, y0], [x0+dx3, y0+dy3]]);
sublines.push([[x0+dx3, y0+dy3], [x0+dx3*2, y0+dy3*2]]);
for (var i=0; i<n-1; i++)
sublines.push(nextEdge(...sublines[sublines.length-1]));
sublines.push([[x0+dx3*2, y0+dy3*2], [x1, y1]]);
result = result.concat(sublines);
})
return fractal(result,i+1);
function nextEdge(p1, p2) {
let x = p1[0]-p2[0];
let y = p1[1]-p2[1];
let px = x * cs - y * sn;
let py = x * sn + y * cs;
return [[p2[0],p2[1]], [p2[0]+px, p2[1]+py]];
}
}
function drawLine(p1, p2){
ctx.beginPath();
ctx.moveTo(p1[0], p1[1]);
ctx.lineTo(p2[0], p2[1]);
ctx.stroke();
}
</script>
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Это мой запросВыглядит как GET, верно? Проблема в том, что если я пытаюсь хоть один параметр запихнуть в Body, то запрос возвращает Bad Request
Столкнулся с такой проблемойУ меня есть функция (для вопроса упростил ее очень сильно):