Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过递归绘制希尔伯特曲线_Java_Recursion_Turtle Graphics - Fatal编程技术网

Java 通过递归绘制希尔伯特曲线

Java 通过递归绘制希尔伯特曲线,java,recursion,turtle-graphics,Java,Recursion,Turtle Graphics,我需要画六阶希尔伯特曲线,但我的程序只适用于一阶。我认为旋转(或一切)有问题,但具体是什么?非常感谢你的帮助 public class TurtleFractal { public static void HilbertCurve(int n, Turtle fred, double step) { if (n > 0) { if (n % 2 == 1) { fred.left(90); HilbertCurve(

我需要画六阶希尔伯特曲线,但我的程序只适用于一阶。我认为旋转(或一切)有问题,但具体是什么?非常感谢你的帮助

public class TurtleFractal {

public static void HilbertCurve(int n, Turtle fred, double step) {
    if (n > 0) {
        if (n % 2 == 1) {
            fred.left(90);
            HilbertCurve(n - 1, fred, step);
            fred.forward(step);
            fred.right(90);
            HilbertCurve(n - 1, fred, step);
            fred.forward(step);
            HilbertCurve(n - 1, fred, step);
            fred.right(90);
            fred.forward(step);
            HilbertCurve(n - 1, fred, step);
            fred.left(90);
        } else {
            fred.right(90);
            HilbertCurve(n - 1, fred, step);
            fred.forward(step);
            fred.left(90);
            HilbertCurve(n - 1, fred, step);
            fred.forward(step);
            HilbertCurve(n - 1, fred, step);
            fred.left(90);
            fred.forward(step);
            HilbertCurve(n - 1, fred, step);
            fred.right(90);
        }
    }
}

public static void main(String[] args) {
    Turtle fred = new Turtle(0, 0, 0);
    //fred can go forward or turn to any angle
    // 0,0-initial coordinates, 0-angle
    fred.down();
    int n = 2;
    //n - curve size 

    double s = Math.pow(2, n - 2);
    double step = 0.5 / (s * 3 + (s - 1));

    //draw the curve
    HilbertCurve(n, fred, step);

}

你在
HilbertCurve()
中的分形代码分叉看起来不错,所以我猜问题与你在
main()
方法中对
step
的计算有关

这里有一种不同的方法,我使用了
worldcordinations()
来更改坐标系以匹配问题(否则您需要知道窗口的大小,这是您在
步骤计算中遗漏的内容。)我还合并了
HilbertCurve()的一半
通过传递一个90或-90的角度值,而不是分支出奇偶校验
n
,将其转换为一。(只是为了多样性。)

您的turtle库与我找到的库不同,因此您需要相应地调整代码。当你问这样的问题时,你应该说明你的海龟图书馆在哪里

public class TurtleFractal {

    public static void HilbertCurve(int n, Turtle turtle, double angle) {
        if (n <= 0) return;

        turtle.left(angle);
        HilbertCurve(n - 1, turtle, -angle);
        turtle.forward(1.0);
        turtle.right(angle);
        HilbertCurve(n - 1, turtle, angle);
        turtle.forward(1.0);
        HilbertCurve(n - 1, turtle, angle);
        turtle.right(angle);
        turtle.forward(1.0);
        HilbertCurve(n - 1, turtle, -angle);
        turtle.left(angle);
    }

    public static void main(String[] args) {
        int n = Integer.parseInt(args[0]);
        double s = Math.pow(2, n);
        Turtle fred = new Turtle();

        fred.worldCoordinates(0, 0, s, s);
        fred.up();
        fred.goTo(0.5, 0.5);
        fred.down();
        HilbertCurve(n, fred, 90.0);
    }
}
输出

> java TurtleFractal 4