废话不说,只看代码!嘻嘻。。。。
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); } } }
相关推荐
谢尔宾斯基三角形,别的写的,和大家分享下哈!
代码是基于VS2015编写的,如果你的IDE高于此版本双击.sln文件即可打开 代码编译成功运行之后:先用鼠标在界面里面左键单击选择三个点作为三角形的顶点,然后双击界面即可迭代生成一次分形,再次双击即可迭代两次,...
L系统_重写系统_希尔伯特曲线_谢尔宾斯基三角形_科赫曲线_雪花曲线
谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出。它是自相似集的例子。它的豪斯多夫维是log(3)/log(2) ≈ 1.585
绘制谢尔宾斯基三角形(1).py
我们没有使用经典的康托迭代算法,而是引入了一种细胞自动化方法来构建谢尔宾斯基三角形,它简单、直接、神奇。
分形图-谢尔宾斯基三角形-彩色
主要介绍了python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形) ,需要的朋友可以参考下
谢尔宾斯基-p5js 递归绘制谢尔宾斯基三角形分形。 (一个 C++ 项目的 p5.js 重构)
谢尔宾斯基分形发生器
计算机图形学 WebGL 课程作业-扭曲的三角形,谢尔宾斯基三角形随机,递归,四面体,球面,俄罗斯方块+源代码+文档说明 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是...
绘制谢尔宾斯基三角形 import turtle # 绘制单个三角形 # [[x1,y1], [x2,y2], [x3,y3]] def draw_triangle(points, color, t): t.fillcolor(color) t.up() # 将画笔移动到第一个点 t.goto(points[0][0], points...
该站点使用 JQuery 滑块来获得所需的谢尔宾斯基三角形复杂度级别,从 1(只有一个等边三角形)到 9 级深。 然后递归函数绘制分形图案。 基本情况是单个等边三角形,函数调用自身在这些三角形内绘制更多三角形。 ...
毕业设计MATLAB源码资料
如果采用具有 2^n^ 行的帕斯卡三角形并将偶数着色为白色,奇数为黑色,则结果是谢尔宾斯基三角形的近似值。 更准确地说,当 n 接近这个奇偶色 2^n^ 行帕斯卡三角形的无穷大时,极限是谢尔宾斯基三角形。 当然,这为...
谢尔宾斯基像这样创建谢尔宾斯基三角形(▲)
opengl实现分形三角形,可以输入三角形的长度
混沌游戏: http : //en.wikipedia.org/wiki/Chaos_game
sierpinski三角形--OpengL实现
Sierpinski_Triangle WebGL Sierpinski三角形