Как я могу вычислить правильные координаты X и Y рекурсивного квадратного преобразования? - PullRequest
0 голосов
/ 01 февраля 2019

Я работаю над фрактальным дизайном, известным как кривая дракона, выполненная с помощью рекурсии Java и StdDraw.Он состоит из квадрата, на котором ветвятся два других квадрата, один на 30 градусов по часовой стрелке, а другой на 60 градусов против часовой стрелки.Мои углы кажутся правильными, но величина, которую квадрат переводит каждый раз, основываясь на новых координатах x и y, неверна последовательно.

Я пробовал несколько разных значений для координат x и y, основываясь на том, что язнать о 30 - 60 - 90 треугольниках и их длинах сторон и соотношениях углов.

public static void main(String[] args)
{
    setUpBackground();
    int n = 5;
    if(args.length > 0)
    {
        n = Integer.parseInt(args[0]);
    }
    double xC = 0.5;
    double yC = 0.45;
    double sideLength = 0.1;
    int degrees = 0;
    dragonCurve(n, xC, yC, sideLength, degrees);
}

public static void setUpBackground()
{
    StdDraw.setCanvasSize(1000, 1000);
    StdDraw.setPenColor(Color.BLACK);
    StdDraw.filledSquare(0, 0, 1);
}

public static void dragonCurve(int n, double xC, double yC, double sideLength, int degrees)
{
    if(n == 0)
    {
        return;
    }
    // just a square
    StdDraw.picture(xC, yC, "Square.png", sideLength, sideLength, degrees);
    dragonCurve(n - 1, xC - sideLength * Math.sqrt(3), yC - sideLength, sideLength * Math.sqrt(3)/2, degrees + 60);
    dragonCurve(n - 1, xC + sideLength/2, yC - sideLength * Math.sqrt(3)/2, sideLength/2, degrees - 30);
}

Ожидаемый результат аналогичен дизайну этой кривой дракона:! https://photos.google.com/share/AF1QipMmXut-wZ-TQEE43iIl6o6LBS7DxdHhmp2-1FsyB41jaRznwoZ3m0XOw6Ubn0ZHbA?key=SU5TdDQzYWpfeU1aN0N0UTJzT1VHbHFsUTBhb2NR Однако мой код рисуеттреугольники полностью выключены.

...