使用java绘制希尔伯特曲线(hilbert curve)

package test;
import java.awt.*;
import java.applet.*;

public class HilbertCurve extends Applet {
    private SimpleGraphics sg=null;
    private int dist0=512, dist=dist0;

    public void init() {
        dist0 = 512;
        resize ( dist0, dist0 );
        sg = new SimpleGraphics(getGraphics());
    }

    public void paint(Graphics g) {
        int level=2;
        dist=dist0;
        for (int i=level;i>0;i--) dist /= 2;
        sg.goToXY ( dist/2, dist/2 );
        HilbertA(level); // 开始递归调用
    }

    private void HilbertA (int level) {
        if (level > 0) {
            HilbertB(level-1);    sg.lineRel(0,dist);//右
            HilbertA(level-1);    sg.lineRel(dist,0);//下
            HilbertA(level-1);    sg.lineRel(0,-dist);//左
            HilbertC(level-1);
        }
    }

    private void HilbertB (int level) {
        if (level > 0) {
            HilbertA(level-1);    sg.lineRel(dist,0);
            HilbertB(level-1);    sg.lineRel(0,dist);
            HilbertB(level-1);    sg.lineRel(-dist,0);
            HilbertD(level-1);
        }
    }

    private void HilbertC (int level) {
        if (level > 0) {
            HilbertD(level-1);    sg.lineRel(-dist,0);
            HilbertC(level-1);    sg.lineRel(0,-dist);
            HilbertC(level-1);    sg.lineRel(dist,0);
            HilbertA(level-1);
        }
    }

    private void HilbertD (int level) {
        if (level > 0) {
            HilbertC(level-1);    sg.lineRel(0,-dist);
            HilbertD(level-1);    sg.lineRel(-dist,0);
            HilbertD(level-1);    sg.lineRel(0,dist);
            HilbertB(level-1);
        }
    }
}

class SimpleGraphics {
    private Graphics g = null;
    private int x = 0, y = 0;

    public SimpleGraphics(Graphics g) { this.g = g; }
    public void goToXY(int x, int y) { this.x = x;   this.y = y; }

    public void lineRel(int deltaX, int deltaY) {
        g.drawLine ( x, y, x+deltaX, y+deltaY );
        x += deltaX;    y += deltaY;
    }
}

效果图:
这里写图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,让我来回答您的问题。 以下是实现 turtle 图形 API 的 Java 类,并编写了一个递归方法来绘制希尔伯特曲线代码示例: ```java import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class Turtle { private double x, y; // turtle position private double angle; // turtle orientation public Turtle(double x, double y, double angle) { this.x = x; this.y = y; this.angle = angle; } public void forward(double dist) { double newx = x + dist * Math.cos(Math.toRadians(angle)); double newy = y + dist * Math.sin(Math.toRadians(angle)); drawLine(x, y, newx, newy); x = newx; y = newy; } public void turnLeft(double delta) { angle += delta; } public void turnRight(double delta) { angle -= delta; } // Method to draw a line using Java's graphics library private void drawLine(double x1, double y1, double x2, double y2) { JFrame frame = new JFrame("Turtle Graphics"); JPanel panel = new JPanel() { @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.BLACK); g.drawLine((int)x1, (int)y1, (int)x2, (int)y2); } }; frame.add(panel); frame.setSize(500, 500); frame.setVisible(true); } // Method to recursively draw a Hilbert curve public void hilbertCurve(int level, double step, int direction) { if (level == 0) { return; } turnLeft(direction * 90); hilbertCurve(level-1, step, -direction); forward(step); turnRight(direction * 90); hilbertCurve(level-1, step, direction); forward(step); hilbertCurve(level-1, step, direction); turnRight(direction * 90); forward(step); hilbertCurve(level-1, step, -direction); turnLeft(direction * 90); } // Main method to create a Turtle object and draw a Hilbert curve public static void main(String[] args) { Turtle turtle = new Turtle(250, 250, 0); turtle.hilbertCurve(6, 5, 1); } } ``` 在这个示例中,我们创建了一个名为 Turtle 的类来实现 turtle 图形 API,并演示如何使用递归方法绘制希尔伯特曲线。在 hilbertCurve() 方法中,我们使用了四个递归调用来绘制一个更高级别的希尔伯特曲线,直到达到最低级别为止。为了绘制希尔伯特曲线,我们使用了 turnLeft()、turnRight() 和 forward() 方法来旋转和移动 turtle,从而绘制曲线的各个部分。 在 main() 方法中,我们创建了一个 Turtle 对象,并调用 hilbertCurve() 方法来绘制希尔伯特曲线。通过调整 hilbertCurve() 方法中的参数,可以生成不同级别的希尔伯特曲线。 希望这个代码示例能够帮助您了解如何使用 Java 实现 turtle 图形 API 和递归方法绘制希尔伯特曲线。如果您还有其他问题,请随时提出,我会尽力回答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值