分形总结(1总)

一、引入
什么是分形?
说的简单点就是“部分与整体以某种形式相似的形,称为分形。”我觉得这个定义就可以基本解释了分形的内涵
二、为什么分形
在递归中寻找规律,在敲代码中发现自然之美,我觉得主要就是锻炼思维,在循环和递归中发现规律
所以关键词:规律
最后我们会发现,多姿多彩的分形是多么的美~~
三、简单分形实例:科赫曲线
科赫曲线是一种外形像雪花的几何曲线,所以又称为雪花曲线,它是分形曲线中的一种。

关键词:递归 寻找一致性
基本思路:每条线段在一次分形变换中都被分为了四条线段并且中间的是一个没有底

的正三角形,在经过四次以上变换之后我们发现它变成了一种类似于雪花的形状

public class 啊啊啊 {
private int depth=1;


public void paint(Graphics g) {

super.paint(g);
KehePaint(150,500,650,500,this.depth);
}


public void KehePaint(double x1,double y1,double x2,double y2,int depth){
if(depth<=1){
g.drawLine((int)x1,(int)y1,(int)x2,(int)y2);
}else{

double x3=(2*x1+x2)/3;
double y3=(2*y1+y2)/3;

double x4=(x1+2*x2)/3;
double y4=(y1+2*y2)/3;


double x5=0,y5=0;
double k=(y4-y3)*(x4-x3);


if(y3==y4){
x5=(x3+x4)/2;
y5=y3-(x4-x3)*Math.sqrt(3)/2;
}else if(k<0){//右上斜
y5=y4;
x5=x3-(x4-x3);
}else if(k>0){//右下斜
y5=y3;
x5=x4+(x4-x3);
}if(x3==x4){
x5=x3;
y5=y3;
}


KehePaint(x1,y1,x3,y3,depth-1);
KehePaint(x3,y3,x5,y5,depth-1);
KehePaint(x5,y5,x4,y4,depth-1);
KehePaint(x4,y4,x2,y2,depth-1);
}
}


@Override
public void mouseClicked(MouseEvent e) {

if(e.getButton()==1&&this.depth<12){
this.depth++;
this.repaint();
}else if(e.getButton()==3&&this.depth>1){
this.depth--;
this.repaint();
}
}

}

四、简单分形实例:希尔宾斯三角形
谢尔宾斯基三角形

基本思路:谢尔宾斯基三角形,最基本就是在一个等边三角形中将三边的中点连接再画一个三角形,再在其分出的三角形中重复此步骤,构成递归。
public Listener (Graphics g){
this.g=g;
}
public void actionPerformed(ActionEvent e){

draw(e);
}
public void draw(ActionEvent e){
x1=100;
y1=500;
x2=400;
y2=500;
draw(x1,y1,x2,y2,10);

}
public void draw(int x1,int y1,int x2,int y2,int t){
t--;
if(t>0){
x3=(int)Math.abs(x1+x2)/2;
y3=(int)Math.abs(y2-Math.sqrt(3)*(x2-x1)/2);
g.drawLine(x1, y1, x2, y2);
g.drawLine(x1, y1, x3, y3);
g.drawLine(x2, y2, x3, y3);

int x11=(x1+x2)/2;
int y11=(y1+y2)/2;
int x22=(x3+x2)/2;
int y22=(y3+y2)/2;
int x33=(x1+x3)/2;
int y33=(y1+y3)/2;
g.drawLine(x11, y11, x33, y33);
g.drawLine(x11, y11, x22, y22);
g.drawLine(x22, y22, x33, y33);
draw(x1,y1,x11,y11,t);
draw(x11,y11,x2,y2,t);
draw(x33,y33,x22,y22,t);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值