使用JavaSwing组件开发画板(4)-创新互联

这是Java画板开发的最后阶段,本章节主要讲解分形的绘制。

我们提供的服务有:成都网站设计、网站制作、外贸营销网站建设、微信公众号开发、网站优化、网站认证、嫩江ssl等。为上千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的嫩江网站制作公司一、分形

  1、简述

  分形看似毫无任何规律,但其实暗藏一定的关系,大部分的分形可以通过某种数学关系的运算,再通过程序递归调用,从而可以绘制出许多图形。其中最常见的图形就是初中学习勾股定理后绘制的勾股树。

二、分形绘制

  明确思路后可以自己动手操作,体验分形的绘制

1、分形树

          首先绘制分形树,先来看图形。

      一般来说,分形绘制我们可以使用已经提供的函数并通过程序递归调用,首先是函数:

                                                     xn+1 = a xn + b yn + e

        yn+1 = c xn + d yn + f

上述函数即绘制该分形所需的函数,接下来是参数。上述图形的参数一共有5组,每组有6个参数,这些参数构成一个二维矩阵。在绘制过程中,需要随机选出一组参数进行计算,一下是图形绘制的参数:

set 1     set 2     set 3     set 4     set 5
             a     0.1950    0.4620   -0.6370   -0.0350   -0.0580
             b    -0.4880    0.4140    0.0000    0.0700   -0.0700
             c     0.3440   -0.2520    0.0000   -0.4690    0.4530
             d     0.4430    0.3610    0.5010    0.0220   -0.1110
             e     0.4431    0.2511    0.8562    0.4884    0.5976
             f     0.2452    0.5692    0.2512    0.5069    0.0969

  接下来是在程序中的实现过程。简单来说就是在鼠标点击画板空白处的时候绘制图形。

首先创建列表用于保存参数。

public static final double [] a = {.195 , .462 , -.637 , -.035 , -.058};
    public static final double [] b = {-.488 , .414 , 0 , .07 , -.07};
    public static final double [] c = {.344 , -.252 , 0 , -.469 , .453};
    public static final double [] d = {.443 , .361 , .501 , .022 , -.111};
    public static final double [] e = {.4431 , .2511 , .8562 , .4884 , .5976};
    public static final double [] f = {.2452 , .5692 , .2512 , .5069 , .0969};

接着创建分形绘制的函数,思路如下:

  首先随机选择一组参数,这里将会用到随机数,将对应的参数取出

Random r = new Random();
 int R1 = r.nextInt(5);
            double A = a[R1];
            double B = b[R1];
            double C = c[R1];
            double D = d[R1];
            double E = e[R1];
            double F = f[R1];

  接着将其带入公式中计算

double xn = A * x0 + B * y0 + E;
double yn = C * x0 + D * y0 + F;

  最后是递归,这里使用for循环进行递归,同时也可以重复调用函数。接下来是整体代码

public void IFS1(){
        Random r = new Random();
        //定义两个变量用于保存递归过程产生的值
        double x0 = 0;
        double y0 = 0;
        //定义整数用于接收坐标值
        int x , y;
        //递归体
        for (int i = 0; i< 100000; i++) {
            int R1 = r.nextInt(5);
            double A = a[R1];
            double B = b[R1];
            double C = c[R1];
            double D = d[R1];
            double E = e[R1];
            double F = f[R1];
            double xn = A * x0 + B * y0 + E;
            double yn = C * x0 + D * y0 + F;
            x0 = xn;
            y0 = yn;
            //参数转型,将浮点型转为整型,同时放大图形
            x = ((int) (x0 * 600 + 200));
            y = ((int) (y0 * 600 + 100));
            //图形位置设置
            x = 800 - x;
            y = 800 - y;
            graphics02.drawLine(x , y , x , y);
        }
    }

  最终效果如下:

  注意事项:分形绘制比较简单,基本上的分形函数都有提供,但在编程过程中需要注意参数的值一定要正确输入,如果输入错误,最终图形的会和原图形不一致,因为在多次递归后差异将会被放大。 

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站栏目:使用JavaSwing组件开发画板(4)-创新互联
文章起源:http://cdiso.cn/article/discgc.html

其他资讯