Я пытаюсь сделать кривую стрелки Серпинского с библиотекой p5. js, но это просто aws кривая, которая слишком «прямая». Вот мой код:
let orderA = ['B', '-', 'A', '-', 'B'];
let orderB = ['A', '+', 'B', '+', 'A'];
let indexA = true;
let indexNum = 0;
let x;
let y;
let angle = 0;
let h = 4;
let moveAmount = 10;
function setup() {
createCanvas(400, 400);
background(220);
angleMode(DEGREES);
strokeWeight(h);
strokeCap(PROJECT);
x = 0;
y = height - h / 2;
for (let i = 0; i < 20; i++) {
move();
}
}
function draw() {
}
function move() {
let order;
if (indexA) {
order = orderA;
} else {
order = orderB;
}
switch (order[indexNum]) {
case 'A':
case 'B':
let xadd = moveAmount * cos(angle);
let yadd = moveAmount * sin(angle);
line(x, y, x + xadd, y + yadd)
x = x + xadd;
y = y + yadd;
break;
case '-':
angle -= 60;
break;
case '+':
angle += 60;
}
if (indexNum == order.length - 1) {
indexA = !indexA;
indexNum = 0;
} else {
indexNum++;
}
}
<script src="https://cdn.jsdelivr.net/npm/p5@0.10.2/lib/p5.js"></script>
В моем коде я повторяю процесс 20 раз, но это не имеет значения, поскольку шаблон продолжается всегда так. Вот как это выглядит:
Я давно пытался отладить его, но не могу найти никаких ошибок.
Кривая стрелки Серпинского dr aws равносторонний треугольник с отверстиями tri angular через равные промежутки времени. Его можно описать двумя замещающими правилами производства: (A → BAB) и (B → A + B + A). A и B повторяются и внизу делают то же самое - рисуют линию. Плюс и минус (+ и -) означают поворот на 60 градусов влево или вправо. Конечная точка кривой стрелки Серпинского всегда одна и та же, если вы повторяете четное число раз и удлиняете длину линии в каждой рекурсии. Если вы вернетесь на нечетную глубину (порядок нечетный), то вы окажетесь на 60 градусов в другой точке треугольника.