废话不说,只看代码!嘻嘻。。。。
import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JPanel; /** * 画出一个谢尔宾斯基三角形 * @author LONG * */ public class SanJiao extends JFrame { private static final long serialVersionUID = 1L; Dimension di = null; Graphics gr = null; JPanel jp = null; /** * 主函数,程序的入口 * @param args */ public static void main(String[] args){ SanJiao sj = new SanJiao(); sj.showFrame(); } /** * 设置用来画出图形的面板 */ public void showFrame(){ this.setTitle("画图"); Toolkit tl = Toolkit.getDefaultToolkit(); di = tl.getScreenSize(); this.setSize(di.width,di.height); this.setDefaultCloseOperation(3); jp = new JPanel(); jp.setPreferredSize(new Dimension(600,400)); this.add(jp); this.setResizable(false); jp.setBackground(Color.BLACK); this.setVisible(true); gr = jp.getGraphics(); jp.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e){ } public void mouseReleased(MouseEvent e){ draw(e); } }); /** * 画出一个谢尔宾斯基三角形的准备工作,设置好显示的位置 */ } public void draw(MouseEvent e){ int x1 = di.width/4; int y1 = di.height*4/5; int x2 = di.width*3/4; int y2 = di.height*4/5; doSomething(x1,y1,x2,y2); } /** * 最终用来递归的函数,来递归画出三角形 * @param x1 传入的左x坐标 * @param y1 传入的左y坐标 * @param x2 传入的右x坐标 * @param y2 传入的右y坐标 */ public void doSomething(int x1,int y1,int x2,int y2){ //控制线程,可以更清楚的看见递归执行的过程 try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } //设置控制条件为,最终画的三角形两底边的x坐标值之差大于10个像素 if(Math.max(x2, x1) - Math.min(x2, x1) > 10){ int x3 = (x1 + x2)/2; //用来计算顶点坐标x值 int y3 = (int)((y1 + y2)/2 - (Math.max(x2, x1) - Math.min(x2, x1))*Math.sqrt(3)/2); //用来计算定点坐标的y值 //为了绚丽一点,设置画笔颜色为随机色 gr.setColor(new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255))); //将三条边连接起来 gr.drawLine(x1,y1,x2,y2); gr.drawLine(x1,y1,x3,y3); gr.drawLine(x2,y2,x3,y3); //得到三条边的中点坐标 int c_x1 = (x1 + x2)/2; int c_y1 = (y1 + y2)/2; int c_x2 = (x1 + x3)/2; int c_y2 = (y1 + y3)/2; int c_x3 = (x2 + x3)/2; int c_y3 = (y2 + y3)/2; //在此处,递归时,先把一个画完,然后才会执行另外的一个,所以关键步骤是要明确终止递归的条件 gr.drawLine(c_x1, c_y1, c_x2, c_y2); gr.drawLine(c_x1, c_y1, c_x3, c_y3); gr.drawLine(c_x2, c_y2, c_x3, c_y3); doSomething(x1,y1,c_x1,c_y1); doSomething(c_x1,c_y1,x2,y2); doSomething(c_x2,c_y2,c_x3,c_y3); } } }
相关推荐
例如,给定的文件"1.cpp"可能是使用C++语言编写的一个程序,用于生成谢尔宾斯基三角形的图形。递归函数通常定义为接受一个表示当前三角形的参数,然后根据迭代次数对每个子三角形进行相同的操作。"1.exe"则可能是一...
代码是基于VS2015编写的,如果你的IDE高于此版本双击.sln文件即可打开 代码编译成功运行之后:先用鼠标在界面里面左键单击选择三个点作为三角形的顶点,然后双击界面即可迭代生成一次分形,再次双击即可迭代两次,...
谢尔宾斯基三角形,又称为谢尔宾斯基海绵或Sierpinski三角,是一种经典的分形几何形状,由波兰数学家瓦茨瓦夫·谢尔宾斯基在1915年提出。分形是数学中一个独特的概念,它描述了一类具有自相似性的几何结构,即使放大...
2. 编程语言:C++可能用于编写程序的核心算法,因为有msvcr80.dll和msvcp80.dll的引用。 3. 跨平台开发:使用wxWidgets库实现跨平台的用户界面,可以在不同操作系统上运行。 4. 图形库:SDL库用于图形渲染,帮助在...
1. **分形基础**:首先,我们需要理解分形的基本概念,包括曼德勃罗集、 Julia集、科赫雪花、谢尔宾斯基三角形等经典分形。了解它们的几何特征和自相似性,以及如何通过数学公式来描述它们。 2. **Visual Basic ...
谢尔宾斯基javascript文件实现了一种简单的算法来生成Sierpinski三角形。 在浏览器中打开html文件,然后应显示三角形。 该算法基于以下事实:生成的三角形是一个以三角形顶点为中心的3个收缩映射族(Lipschitz常数...
在C++中使用MFC(Microsoft Foundation Classes)框架来实现这一算法,可以提供一个直观的用户界面,并结合VC6.0这样的开发环境,使得程序的编写和调试更为便捷。 首先,IFS的核心在于一系列的迭代变换规则。对于...
在MFC中编写分形图的代码,可以让我们更好地理解Windows应用程序的架构,并学习如何利用C++进行图形绘制。 在创建分形图时,常见的算法包括曼德勃罗集、朱利亚集、科赫曲线和谢尔宾斯基三角形等。这些算法通过迭代...
测试中,要求编写一个使用5000个随机点来绘制2D谢尔宾斯基三角形(Sierpinski gasket)的程序。谢尔宾斯基三角形是一种典型的分形图形,通过迭代递归的过程,从一个大的等边三角形不断分割生成。这个任务要求编程...
对于初学者,可以从简单的分形曲线开始,比如科赫曲线或谢尔宾斯基三角形,这些更容易理解和实现。随着技能的提升,可以尝试更复杂的分形,如曼德勃罗集或朱利亚集。 文件"2_01"可能包含了分形曲线的源代码实现。...
3. **迭代过程**:在主程序中,调用迭代函数,每次迭代将三角形分割成四个新的三角形,去除中心的三角形,并将剩余的三个三角形继续迭代。 4. **绘图**:在每次迭代后,记录下所有的三角形顶点,最后用`plot`函数把...
3. **其他Sierpinski变体**:sierpinsky2.caml和sierpinsky3.caml可能是对谢尔宾斯基三角形不同变体的实现,或者可能是对谢尔宾斯基地毯或其他类似分形的建模。 4. **IP.caml**:这个文件名没有明显的直观含义,但...
根据提供的文件名列表(2_10、2_09、2_11、2_14、2_12、2_16、2_13、2_15),这些实例可能涵盖不同的分形类型,如曼德勃罗集、朱利亚集、科赫曲线、谢尔宾斯基三角形等。每个文件可能对应一个具体的分形算法实现,...
在这些脚本中,可能包含了生成不同类型的分形,如曼德勃罗集、科赫曲线、谢尔宾斯基三角形等。通过这些脚本,用户可以学习到如何用MATLAB实现分形算法,进一步探索分形的性质和应用。 第三个知识点:数据导入与分析...
常见的分形包括曼德勃罗集、朱利亚集、科赫曲线、谢尔宾斯基三角形等。例如,曼德勃罗集的生成通常涉及复数运算,通过对复数点进行迭代函数计算,判断是否超出特定范围来决定颜色分配。朱利亚集则是基于另一个复数...
3. `ifs_sierpinski_gasket.mq5` 和 `ifs_sierpinski_carpet.mq5`:这两个文件分别对应于著名的谢尔宾斯基三角形(Sierpinski Gasket)和谢尔宾斯基地毯(Sierpinski Carpet)。这两个都是典型的分形结构,通过迭代...
分形几何中的经典例子包括曼德勃罗集、科赫曲线、谢尔宾斯基三角形等。这些形状的生成往往涉及到复数运算、迭代过程以及递归算法。例如,曼德勃罗集的生成是通过对每个复数点进行迭代函数计算,如果在一定次数内不...
编写程序时,可以定义一个函数来处理一个正方形,然后在每次迭代中调用这个函数处理新的8个小正方形。 6. **像素操作**:在实际编程中,使用像素数组来表示地毯,每个元素代表一个像素。通过遍历这个数组并根据迭代...