Создание "кривой стрелки Серпинского" с p5. js - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь сделать кривую стрелки Серпинского с библиотекой 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 раз, но это не имеет значения, поскольку шаблон продолжается всегда так. Вот как это выглядит:

This is how it ends up looking

Я давно пытался отладить его, но не могу найти никаких ошибок.

Кривая стрелки Серпинского dr aws равносторонний треугольник с отверстиями tri angular через равные промежутки времени. Его можно описать двумя замещающими правилами производства: (A → BAB) и (B → A + B + A). A и B повторяются и внизу делают то же самое - рисуют линию. Плюс и минус (+ и -) означают поворот на 60 градусов влево или вправо. Конечная точка кривой стрелки Серпинского всегда одна и та же, если вы повторяете четное число раз и удлиняете длину линии в каждой рекурсии. Если вы вернетесь на нечетную глубину (порядок нечетный), то вы окажетесь на 60 градусов в другой точке треугольника.

This is how it should look

...