迭代分形系统

什么是IFS?

IFS(Iterated Function System)迭代函数系统,可以通过迭代来创造出分形图案。

什么是分形图案?

分形图案:力图通过数学方法,来创造自相似的图案(例如树叶等)。


下面,我们通过三类例子来深入探索IFS的世界:

1.单一常量

代码实现:

void generate(Graphics g){
    double x=0,y=0;
    double tx,ty;
    double a=-1.8,b=-2.0,c=-0.5,d=-0.9;
    for (int i = 0; i < 500000; i++) {
        tx=Math.sin(a*y)+c*Math.cos(a*x);
        ty=Math.sin(b*x)+d*Math.cos(b*y);
        int px=(int)(tx*100)+400;
        int py=(int)(ty*100)+400;
        g.drawLine(px,py,px,py);
        x=tx;
        y=ty;
    }
}

在这里,我们通过放大坐标,使图像能够正常显示。

一定要注意类型转换问题!!

生成效果:

生成效果1生成效果2

不过有一个问题,在生成图片的时候会面临着生成效率慢的问题,为啥呢?

电脑生成图像所需步骤:
RAM-->CPU-->RAM-->I/O-->GPU-->SCRN

上述程序在运行时,每处理一个像素点,就会将上述流程走一遍,所以会拖慢速度。

假如,我先处理好所有的像素点,再一起输出到GPU,会不会更快呢?

这里,需要用到一个新的类型:BufferedImage,我们先将所有像素点缓存到BufferedImage中,最后一起输出即可。

BuffedImage Bfg = new BufferImage(界面x长度,界面y长度,颜色表示方法);
//buffered:缓冲的、缓存的

完整代码:

package ahc0926.DrawIFS.drawagain;

import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;

public class DrawIFS extends JFrame {
    private BufferedImage buffer;
    public DrawIFS(){
        setTitle("IFS");
        setSize(1000,1000);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(true);
        setLocationRelativeTo(null);
        buffer = new BufferedImage(1000, 1000,BufferedImage.TYPE_INT_RGB);
        setVisible(true);
    }
    @Override
    public void paint(Graphics g){
        super.paint(g);
        draw();
        g.drawImage(buffer,0,0,null);
    }
    public void draw(){
        Graphics g = buffer.getGraphics();
        double a=-1.7,b=1.3,c=-0.1,d=-1.2;
        double x=0,y=0;
        double tx,ty;
        for (int i = 0; i < 1000000; i++) {
            tx=Math.sin(a*y)+c*Math.cos(a*x);
            ty=Math.sin(b*x)+d*Math.cos(b*y);
            int px=(int)(tx*200)+500;
            int py=(int)(ty*200)+500;
            g.drawLine(px,py,px,py);
            x=tx;
            y=ty;
        }
    }
    public static void main(String[] args) {
        new DrawIFS();
    }
}


迭代分形系统
https://blog.arronhc.cyou//archives/wei-ming-ming-wen-zhang
作者
ArronHC
发布于
2023年10月31日
许可协议