分形之——谢尔宾斯基三角形
现实中我们画不出的一些图形,在机器的世界里可以尽情发挥无限的想象力让计算机来帮我们完成。比如说著名谢尔宾斯基三角形 。如果人工去画这样一副图,不仅是不标准的,而且还要花上大量的时间。所以计算机的“”死脑筋”和极快的速度可以得到人类很好的利用。
递归:一个巧妙的工具,虽然它在时间复杂度上比较令人头疼,但是用它来做一些东西仍是不错的选择。这里我们演示一下谢尔宾斯基三角形的做法。
源代码:
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. **分形的度量**:讨论了分形的尺寸测量问题,包括豪斯多夫维数、盒维数等。...
代码是基于VS2015编写的,如果你的IDE高于此版本双击.sln文件...代码编译成功运行之后:先用鼠标在界面里面左键单击选择三个点作为三角形的顶点,然后双击界面即可迭代生成一次分形,再次双击即可迭代两次,以此类推
在编程实现谢尔宾斯基三角形时,递归算法是最常采用的手段之一。程序员通过定义递归函数,让每个小三角形都遵循相同的操作规则,从而在屏幕上绘制出复杂的图形。例如,一个名为"1.cpp"的C++文件可能就是一个生成...
Python中的turtle作图工具,我们可以画出各种各样的美妙的图形,分形图就是其中之一,彩色螺旋线是分形图中极具代表性的图之一,每位学习Python的IT民工都会实际上手操作的一个小实验。希望这个资源可以为你们提供到...
分形理论是现代科学中非线性科学的三大理论前沿之一,它主要研究的是自然界中那些看似无序、复杂却呈现出内在规律性的几何形态。这一理论由美国IBM公司的研究员、哈佛大学数学教授曼德勃罗特(Benoit B. Mandelbrot...
谢尔宾斯基三角形,又称为谢尔宾斯基海绵或Sierpinski三角,是一种经典的分形几何形状,由波兰数学家瓦茨瓦夫·谢尔宾斯基在1915年提出。分形是数学中一个独特的概念,它描述了一类具有自相似性的几何结构,即使放大...
http://download.csdn.net/source/877380的升级版,减少了绘制顶点的显存开销,解决... 一个简单win32程序,只有一个cpp文件。由迭代公式Z=Z^2+C生成图形。在左边的窗口显示M集(Z0=0, C在平面内取坐标值)。...用D3D绘制。
一个简单win32程序,只有一个cpp文件。由迭代公式Z=Z^2+C生成图形。在左边的窗口显示M集(Z0=0, C在平面内取坐标值)。左边窗内点击鼠标,所取坐标点赋为J集的常数C(Z0=在平面内取坐标值,C为给定...图形用D3D绘制。
疫情作为突发性公共卫生事件,对全球金融市场造成了巨大冲击,投资者避险情绪上升,货币基金作为安全性较高的理财产品之一,其收益率在疫情期间表现出相对稳定的特征。尽管疫情对经济活动和金融市场造成了短期冲击,...
通过对 p5.js 的运用,这个项目不仅展示了谢尔宾斯基三角形的数学之美,还体现了 JavaScript 和分形几何在创意编程中的应用潜力。无论是对分形理论的研究,还是对 web 前端开发的学习,这个项目都是一个很好的实践...
谢尔宾斯基三角形,又称为分形三角形,是由波兰数学家谢尔宾斯基提出的另一个著名的分形几何形状。它的构造过程是将一个大的等边三角形分割成四个小等边三角形,然后去除中间的一个,对剩余的三个再重复此过程。经过...
谢尔宾斯基三角形是一种著名的分形几何图形,由波兰数学家谢尔宾斯基在1915年提出。这个三角形的构造过程基于一系列简单的迭代规则,每次迭代都将当前的三角形分割成四个更小的等边三角形,然后删除中间的一个,如此...
在本案例中,我们将探讨如何使用VC++编程语言来实现一种分形图形——分形三角形。 ### 二、分形三角形原理 分形三角形通常是通过迭代函数系统(Iterated Function System, IFS)来定义的。IFS是一组由仿射变换组成...
谢尔宾斯基三角形是一种分形几何图形,通过递归地将一个大三角形划分为四个小三角形并去除中间部分来构建。这个设计可能涉及到图像处理和算法实现,是MATLAB编程在图形和分形理论应用的一个实例。 描述中提到的...
谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出。它是自相似集的例子。它的豪斯多夫维是log(3)/log(2) ≈ 1.585
在华中科技大学的计算机图形学课程中,学生通过上机实验深入理解和掌握相关理论,其中一个实验主题是“分形三角形和三维场景绘制”。这个实验旨在让学生了解并实践分形几何和3D场景构建的基本原理。 分形三角形是一...
谢尔宾斯基三角形是一种分形图形,它的生成过程涉及到三次递归。我们首先定义一个`draw_triangle`函数用于填充指定颜色的三角形,然后编写`get_mid`函数计算两点的中点。核心函数`sierpinski`接收一个三角形的顶点...