Java——迭代分形

一,什么是迭代分形

 迭代就是更替,轮换的意思。使用一系列循环对一组指令进行重复执行;分形是其组成部分与其整体相似的形,比如一个图形组成部分以某种方式与整体相似,那么该图形称为分形;迭代分形就是运用一系列循环操作按照一定的规律得到的由许多相似图形组成的图形。

二,迭代分形示例

1.

public void IFS1(double x, double y) {
        double a = -1.8, b = -2.0, c = -0.5, d = -0.9;
        //固定参数
        for (int i = 0; i < 100000; i++) {
            double tempX = Math.sin(a * y) + c * Math.cos(a * x);
            
            double tempY = Math.sin(b * x) + d * Math.cos(b * y);
            //计算下一组坐标                                                                            
            x = tempX;
            y = tempY;
            //交换数据
            int X = (int) (x * 100) + x1;
            int Y = (int) (y * 100) + y1;
            //放大图形,调整图形比例
            g.setColor(new Color(200,100,100));
            g.drawLine(X, Y, X, Y);
            //绘制出图形

        }
    }

2.

public void IFS3(double x, double y) {
        int n = 0;
        double[] a = {0.787879, -0.121212, 0.181818};
        double[] b = {-0.424242, 0.257576, -0.136364};
        double[] c = {0.242424, 0.151515, 0.090909};
        double[] d = {0.859848, 0.053030, 0.181818};            
        double[] e = {1.758647, -6.721654, 6.086107};
        double[] f = {1.408065, 1.377236, 1.568035};
        //参数数组
        for (int i = 0; i < 100000; i++) {
            
            Random random = new Random();
            int j = random.nextInt(100);
            //这里是为了模拟概率
            if (j <= 90) {//90%的概率调用第一组参数
                n = 0;

            } else if (j <= 95 && j > 90) {5%的概率调用第二组参数
                n = 1;

            } else if (j <= 100 && j > 95) {5%的概率调用第三组参数
                n = 2;

            }

            double tempX = a[n] * x + b[n] * y + e[n];
            double tempY = c[n] * x + d[n] * y + f[n];
            //计算下一组坐标

            x = tempX;
            y = tempY;
            //交换数据

            int X = (int) (tempX * 50) + x1;
            int Y = (int) (tempY * 50) + y1;
            //调整比例
            g.drawLine(X, Y, X, Y);
            //绘出图形
        }

    }

3.

public void IFS5(double x , double y){
        double a ,b ,c ,d ,e ,f;
        double[]an  = {   0.0000   ,   0.7248  ,   0.1583   ,  0.3386} ;
        double[]bn  = {   0.2439   ,   0.0337  ,  -0.1297   ,  0.3694} ;
        double[]cn  = {   0.0000   ,  -0.0253  ,   0.3550   ,  0.2227} ;
        double[]dn  = {   0.3053   ,   0.7426  ,   0.3676   , -0.0756} ;
        double[]en  = {   0.0000   ,   0.2060  ,   0.1383   ,  0.0679} ;
        double[]fn  = {   0.0000   ,   0.2538  ,   0.1750   ,  0.0826} ;
        //建立参数数组
        for (int i = 0; i <1000000 ; i++) {
            Random random = new Random();
            int n = random.nextInt(4);
            //随机选取一组参数
            a = an[n];
            b = bn[n];
            c = cn[n];
            d = dn[n];
            e = en[n];
            f = fn[n];

            double tempX = a*x + b*y +e;
            double tempY = c*x + d*y +f;
            //计算下一组坐标
            x=tempX;
            y=tempY;
            //数据代换
            int X = (int) (tempX * 500) + x1;
            int Y = (int) (tempY * 500) + y1;
            //调整比例
            g.setColor(Color.GREEN);
            g.drawLine(X,Y,X,Y);
            绘图
        }


    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值