使用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