java递归绘制分形树并用界面进行展示

实现思路如下:  

先垂直绘制一根线段,然后在线段顶端向右一定倾角绘制一根线段,长度分别为原线段的k倍。再同样的,在线段左侧以固定倾角绘制一根线段,如此反复,直至线段长度小于某个较小的值。其中,线条的颜色以及长度,夹角(例如产生某个范围的随机数)都可以自行进行微调。

 

代码如下:

package recursion;
import javax.swing.*;
import java.awt.*;

/**
 * @ Author     :heywecome
 * @ Date       :Created in 11:05 2018/12/17
 * @ Description:绘制分型树
 * @ Modified By:
 * @Version: $version$
 */
public class fractalTree extends JFrame{
    // 先垂直绘制一根线段,然后在线段顶端向右一定倾角绘制一根线段,长度分别为原线段的k倍.
    // 再同样的,在线段左侧以固定倾角绘制一根线段,如此反复,直至线段长度小于某个较小的值。
    // 其中,线条的颜色以及长度,夹角(例如产生某个范围的随机数)都可以自行进行微调。

    public fractalTree() {
        super("分形树");
        setBounds(200, 200, 1000, 800);
        // 表示生成的窗体大小可改变
        setResizable(true);
        // 结束窗口所在的应用程序。在窗口被关闭的时候会退出JVM
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void drawTree(Graphics g, int x1, int y1, double angle, double length) {
        if (length < 0.5) return;
        int x2 = x1 + (int) (Math.cos(Math.toRadians(angle)) * length*10);
        int y2 = y1 + (int) (Math.sin(Math.toRadians(angle)) * length*10);
        g.setColor( length < 1.2 ? Color.pink : Color.GRAY );

        g.drawLine(x1, y1, x2, y2);

        drawTree(g, x2, y2, angle+ 33.5, length/1.3);
        drawTree(g, x2, y2, angle- 33.5, length/1.3);
    }


    public void paint(Graphics g) {
        g.setColor(Color.GRAY);
        drawTree(g, 500, 700, -90, 14);
    }

    public static void main(String[] args) {
        new fractalTree().setVisible(true);
    }
}

最终效果截图:

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值