Java分形(二)

今天给大家带来一些干货,对分形有兴趣的朋友可以进来看看!

不多解释,先上图

看起来还是挺不错的吧

那就来个长长的分割线!




import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;



import javax.swing.JFrame;



public class FractalTree extends JFrame {



public FractalTree() {

super("Fractal Tree");

setBounds(10, 10, 800, 700);

setResizable(false);

setDefaultCloseOperation(EXIT_ON_CLOSE);

}



private void drawTree(Graphics2D g, int x1, int y1, double angle, int depth) { // 画树,depth是迭代的深度,angle是角度

if (depth == 0)

return;

int x2 = x1 + (int) (Math.cos(Math.toRadians(angle)) * depth * 10.0);//Math.toRadians这是让角度转化为弧度的方法,弧度=角度/π

int y2 = y1 + (int) (Math.sin(Math.toRadians(angle)) * depth * 10.0);

g.setColor(Color.getHSBColor(0.25f - 0.125f / depth, 0.9f, 0.6f)); // 颜色渐变

g.setStroke(new BasicStroke(depth)); // 画笔的粗细

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

try {

Thread.sleep(10);

} catch (Exception el) {

} // 让图展示它的形成过程

drawTree(g, x2, y2, angle - 40, depth - 1);// 递归,这里可以自行改变数据让图不同

drawTree(g, x2, y2, angle + 40, depth - 1);



}



public void paint(Graphics g) {

Graphics2D gc = (Graphics2D) g;

gc.fillRect(0, 0, 800, 700);

gc.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// 抗锯齿



drawTree(gc, 400, 650, -90, 9);

}



public static void main(String[] args) {

new FractalTree().setVisible(true);

}

}

这就是大家都想要的代码了!

大家可以慢慢了解代码的运行,也可以自己改动数据测试出更多好看的分形。

猜你喜欢

转载自blog.csdn.net/qq_38831367/article/details/82592196
今日推荐