java用swing,用递归的方法来画谢尔宾斯基三角形

思想:每次给定一个三角形,先算出各中点坐标,然后把它分成4个小三角形,当上小三角形,左小三角形、右小三角形画好时,中间的第四个三角形也自动画好了。

源码:

package base;import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class SierpinskiTriangle extends JFrame{//放置文本域的面板JPanel DegreePanel=new JPanel();//用于画图的JPanel面板TrianglePanel TP=new TrianglePanel();public SierpinskiTriangle() {DegreePanel.add(new JLabel("请输入循环次数(10次以内)"));JTextField jtf=new JTextField("0",5);//面板添加文本域DegreePanel.add(jtf);//文本域添加监听器jtf.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {TP.setDegree(Integer.parseInt(jtf.getText()));}});//在框架里面添加画图面板和文本域面板add(DegreePanel,BorderLayout.SOUTH);add(TP);}//内部类继承画板,用来画三角形static class TrianglePanel extends JPanel{//degree表示循环的次数private int degree=0;//设置循环的次数public void setDegree(int de) {this.degree=de;//调用paintComponent()repaint();}//参数g可以理解为画笔protected void paintComponent(Graphics g) {super.paintComponent(g);//计算大三角形所需的3个点//getWeight()、getHeight()分别获得整个显示窗口的宽和长Point p1=new Point(getWidth()/2,15);Point p2=new Point(15,getHeight()-15);Point p3=new Point(getWidth()-15,getHeight()-15);//画三角形主要方法paintTriangle(p1,p2,p3,degree,g);}private void paintTriangle(Point p1, Point p2, Point p3, int degree, Graphics g) {if(degree>=0) {//根据三个点画三角形   g.drawLine(p1.x, p1.y, p2.x, p2.y);g.drawLine(p1.x,p1.y, p3.x, p3.y);g.drawLine(p2.x, p2.y, p3.x, p3.y);//计算三个中点坐标Point p12=midPoint(p1,p2);//计算p1和p2的中点p12Point p13=midPoint(p1,p3);//计算p1和p3的中点p13Point p23=midPoint(p2,p3);//计算p2和p3的中点p23//递归画三角形paintTriangle(p1,p12,p13,degree-1,g);//画上部分的三角形paintTriangle(p12,p2,p23,degree-1,g);//画左下角的三角形paintTriangle(p13,p23,p3,degree-1,g);//画右下角的三角形}}//计算中点坐标的方法private Point midPoint(Point p1, Point p2) {return new Point((p1.x+p2.x)/2,(p1.y+p2.y)/2);}}public static void main(String[] args) {//设置框架JFrame frame=new SierpinskiTriangle();frame.setTitle("搞了很久才完成的递归三角形");frame.setSize(600,500);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setLocationRelativeTo(null);frame.setVisible(true);}
}

运行结果:输入递归次数或三角形

程序开始时结果如上:

循环次数为1时,结果如上

循环次数为4时,结果如上:

循环次数为10时,结果如上

用Java的swing递归画画谢尔宾斯基三角形相关推荐

  1. 小白第一步|Java实现递归分形(以谢尔宾斯基三角形和勾股树为例)

    一个递归分形搞得我心态爆炸 于是 我一定要写个博客祭奠一下!!!!!! 首先回顾一下递归的几个要素: 1.return:往上回溯 2.调用自身:往下挖掘 3.设置条件:防止无限递归 4.递归操作:分析 ...

  2. Java面向对象编程:利用递归思想绘制“谢尔宾斯基地毯”和“谢尔宾斯基三角形”

    1.递归:在方法中调用本方法. 2.递归调用会无限循环下去,因此方法体中必须有结束方法的条件.返回值为void时通常写为: if (条件) {return; } 下面使用递归绘制"谢尔宾斯基 ...

  3. python螺旋圆的绘制_python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)...

    插图工具使用Python内置的turtle模块,为什么叫这个turtle乌龟这个名字呢,可以这样理解,创建一个乌龟,乌龟能前进.后退.左转.右转,乌龟的尾巴朝下,它移动时就会画一条线.并且为了增加乌龟 ...

  4. Python数据结构15:turtle模块制图,画直线,正方形,星星,递归可视化:分形树,谢尔宾斯基三角形

    1. Python中的turtle模块制图 前面已经讲了递归的原理,这里用递归作图来直观的理解递归. 首先了解以下Python中用于作图的内置海龟作图系统turtle module. Python内置 ...

  5. 数据结构与算法(Python版)二十二:递归可视化(谢尔宾斯基三角形)

    谢尔宾斯基Sierpinski三角形 分形构造, 平面称谢尔宾斯基三角形, 立体称谢尔宾斯基金字塔 谢尔宾斯基三角形:作图思路 根据自相似特性, 谢尔宾斯基三角形是由3个尺寸减半的谢尔宾斯基三角形按照 ...

  6. 分形——谢尔宾斯基三角形

    分形--谢尔宾斯基三角形 普通几何学研究的对象,一般都具有整数的维数.比如,零维的点.一维的线.二维的面.三维的立体.乃至四维的时空.在20世纪70年代末80年代初,产生了新兴的分形几何学(fract ...

  7. 简单分形(谢尔宾斯基三角形和地毯)

    对于分形,我的理解就是:由小元件组成整体,然后再用另一或相同整体替换元件形成的循环迭代图形. 下面以谢尔平斯基三角形为例,介绍下最简单的分形思路. 第一步,先构造一个正三角形,取正三角形三边中点并连线 ...

  8. 混沌与分形(一):谢尔宾斯基三角形与门格海绵

    研究混沌运动,少不了对分形理论的探讨.分形:通常被定义为"一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状",即具有自相似的性质. 本篇将从 ...

  9. 谢尔宾斯基三角形GUI

    源代码:https://github.com/ltoddy/Python-useful sierpinskitriangle.py from tkinter import *class Sierpin ...

  10. 小练手:用Canvas绘制谢尔宾斯基三角形

    转载<小练手:用Canvas绘制谢尔宾斯基三角形> 补充 作者第二种画法的完整程序: PS:修改function SierpinskiTriangle(p,len,depth = 9)中d ...

最新文章

  1. 一天学完spark的Scala基础语法教程五、闭包(idea版本)
  2. Android项目实战视频教程_快递轨迹查询应用开发
  3. word2vector数据集样式_这样做数据可视化驾驶舱,高端大气,一目了然,领导不点赞都难...
  4. Web页面请求的历程(从应用层到链路层)
  5. Android高级开发面试题目,再也不用担心不能升职加薪了。
  6. Linux DHCP服务详解
  7. 微信公众平台开发(51)会员卡
  8. AI人工智能开发的5种最佳人工智能编程语言
  9. 第一章 计算机组成原理 ---- 概述
  10. 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第四节课笔记
  11. 尚学堂马士兵_Struts2下载完成
  12. 病毒之Worm.Win32.AutoRun
  13. HTML表单元素、标签、iframe内联框架 详细代码图解
  14. 这个【vue】项目,让我明白了…
  15. 基于JAVA游泳馆信息管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  16. React项目使用craco(由create-react-app创建项目)
  17. 中国大数据产业版图:东南沿海继续引领 独角兽扎堆北上深杭
  18. 研究OCL功率放大电路的输出功率和效率
  19. js效果 div跟随鼠标移动
  20. 复盘实战营一期毕业典礼----HHR计划----以太入门课--第一课

热门文章

  1. 通过三层交换机实现VLAN间路由
  2. PI和模糊控制器的simulink仿真
  3. Sophix热修复的简单使用
  4. 解决扫码枪中文输入法冲突问题
  5. 《畅玩NAS》第3章 ESXI安装OpenMediaVault
  6. TOMCAT中文乱码
  7. 09-Git-补丁patch操作
  8. (附源码)spring boot小型仪器公司生产管理系统 毕业设计 031853
  9. 树形控件之思维导图 Android
  10. 居然有比冰点更好的文库下载神器,能下载文库源文档?