`
心若吾心
  • 浏览: 19026 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

分形之——谢尔宾斯基三角形

阅读更多
分形之——谢尔宾斯基三角形

现实中我们画不出的一些图形,在机器的世界里可以尽情发挥无限的想象力让计算机来帮我们完成。比如说著名谢尔宾斯基三角形 。如果人工去画这样一副图,不仅是不标准的,而且还要花上大量的时间。所以计算机的“”死脑筋”和极快的速度可以得到人类很好的利用。
递归:一个巧妙的工具,虽然它在时间复杂度上比较令人头疼,但是用它来做一些东西仍是不错的选择。这里我们演示一下谢尔宾斯基三角形的做法。


源代码:
package testAng;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class FrameListener implements MouseListener {

private Graphics g;
private Color c1 = Color.red;
private Color c2 = Color.yellow;
private Color c3 = Color.blue;

/**
* 带参数的构造方法
*/
public FrameListener(Graphics g) {
this.g = g;
}

/**
* 画出分形图形
*/
public void mouseClicked(MouseEvent e) {
// 调用画分形的方法
drawAng(8, g, 300, 60, 30, 500, 570, 500, 0);
}

/**
* 递归画歇尔滨斯基三角形
*
* @param count循环次数
* @param g画布
* @param x1
* @param y1
* @param x2
* @param y2
* @param x3
* @param y3
* @param R红色
* @param G黄色
* @param B蓝色
*/
public void drawAng(int count, Graphics g, int x1, int y1, int x2, int y2,
int x3, int y3, int type) {
count--;
// count>0 递归 否则返回
if (count < 1) {
return;
}
if (type == 1) {
g.setColor(c1);
}
if (type == 2) {
g.setColor(c2);
}
if (type == 3) {
g.setColor(c3);
}
g.drawLine(x1, y1, x2, y2);
g.drawLine(x1, y1, x3, y3);
g.drawLine(x2, y2, x3, y3);
int x4 = (x1 - x2) / 2 + x2;
int y4 = (y2 - y1) / 2 + y1;
int x5 = (x3 - x1) / 2 + x1;
int y5 = (y3 - y1) / 2 + y1;
int x6 = (x3 - x2) / 2 + x2;
int y6 = (y3 - y2) / 2 + y2;
drawAng(count, g, x1, y1, x4, y4, x5, y5, 1);
drawAng(count, g, x4, y4, x2, y2, x6, y6, 2);
drawAng(count, g, x5, y5, x6, y6, x3, y3, 3);

}

// 以下是用不到的方法,可以必须实现MouseListener接口中的这些方法
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}

}


//另一个类,运行用
package testAng;

import java.awt.Graphics;

public class ang extends javax.swing.JFrame {

/**
* 初始化界面
*/
public void init() {
// 设置窗体属性
this.setSize(600, 600);
this.setDefaultCloseOperation(3);
this.setVisible(true);
Graphics g = this.getGraphics();
java.awt.event.MouseListener l = new FrameListener(g);
this.addMouseListener(l);

}

public static void main(String[] args) {
ang a = new ang();
a.init();
}
}

分享到:
评论

相关推荐

    分形几何——数学基础及其应用

    2. **分形的构造**:详细探讨了如何构建典型的分形模型,如康托集、谢尔宾斯基三角形等。通过具体的构造方法,加深对分形结构的理解。 3. **分形的度量**:讨论了分形的尺寸测量问题,包括豪斯多夫维数、盒维数等。...

    很好用的分形计算,里面还有验证的程序。我一直在用,推荐给大家

    `fd_sierp.m`可能用于计算另一种分形——谢尔宾斯基地毯的分形维数。谢尔宾斯基地毯类似于三角形,但它是基于正方形的。在这个过程中,将一个正方形划分为9个相同的小正方形,移除中间的一个,然后对剩下的8个小...

    分形算法与程序设计——Visual Basic实现--光盘文件

    1. **分形基础**:首先,我们需要理解分形的基本概念,包括曼德勃罗集、 Julia集、科赫雪花、谢尔宾斯基三角形等经典分形。了解它们的几何特征和自相似性,以及如何通过数学公式来描述它们。 2. **Visual Basic ...

    分形算法与程序设计——Visual Basic实现.rar

    - **谢尔宾斯基三角形**:通过递归地将正三角形分割成四个小三角形,然后去掉中间一个,形成自相似图案。 4. **VB实现分形算法的步骤**: - **初始化参数**:设置迭代次数、颜色规则、缩放比例等。 - **计算迭代...

    关于分形------简要介绍

    ### 关于分形——简要介绍 #### 分形概述 分形是一种数学概念,它描述的是自然界中那些不规则、不平滑的图形或结构。这些结构在视觉上展现出复杂性和自相似性,即在不同尺度下表现出类似的形态特征。分形理论在20...

    图形学 分形图

    在创建分形图时,常见的算法包括曼德勃罗集、朱利亚集、科赫曲线和谢尔宾斯基三角形等。这些算法通过迭代过程生成复杂的图案,每一步迭代都基于上一步的结果。例如,曼德勃罗集的计算涉及到复数运算,通过设定一个...

    分形几何的理论和程序 重要

    本文将简要介绍四个最著名的分形,它们分别是科赫雪花、谢尔宾斯基三角形、曼德博集合以及朱利亚集合。 1. **科赫雪花**:这是一个通过重复地添加三角形来形成的分形图案。初始形状是一个等边三角形,每一步都将每...

    分形生成器

    4. **谢尔宾斯基三角**:谢尔宾斯基三角是一种分形,通过将正三角形划分为四个等腰直角三角形,然后替换掉中间的三角形,反复进行此过程,最终形成无穷多的小三角形,整体看起来像一个像素化版本的三角形。...

    Sierpinski_Triangle:WebGL Sierpinski三角形

    **Sierpinski三角形**,也称为塞尔皮斯基三角形,是一种著名的分形几何图形。这个图形由波兰数学家Wacław Sierpiński在1915年提出,它通过递归地将一个等边三角形分割成四个较小的等边三角形并去除中间部分来构建...

Global site tag (gtag.js) - Google Analytics