今天给大家带来一些干货,对分形有兴趣的朋友可以进来看看!
不多解释,先上图
看起来还是挺不错的吧
那就来个长长的分割线!
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);
}
}
这就是大家都想要的代码了!
大家可以慢慢了解代码的运行,也可以自己改动数据测试出更多好看的分形。