用Java的swing递归画画谢尔宾斯基三角形
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递归画画谢尔宾斯基三角形相关推荐
- 小白第一步|Java实现递归分形(以谢尔宾斯基三角形和勾股树为例)
一个递归分形搞得我心态爆炸 于是 我一定要写个博客祭奠一下!!!!!! 首先回顾一下递归的几个要素: 1.return:往上回溯 2.调用自身:往下挖掘 3.设置条件:防止无限递归 4.递归操作:分析 ...
- Java面向对象编程:利用递归思想绘制“谢尔宾斯基地毯”和“谢尔宾斯基三角形”
1.递归:在方法中调用本方法. 2.递归调用会无限循环下去,因此方法体中必须有结束方法的条件.返回值为void时通常写为: if (条件) {return; } 下面使用递归绘制"谢尔宾斯基 ...
- python螺旋圆的绘制_python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)...
插图工具使用Python内置的turtle模块,为什么叫这个turtle乌龟这个名字呢,可以这样理解,创建一个乌龟,乌龟能前进.后退.左转.右转,乌龟的尾巴朝下,它移动时就会画一条线.并且为了增加乌龟 ...
- Python数据结构15:turtle模块制图,画直线,正方形,星星,递归可视化:分形树,谢尔宾斯基三角形
1. Python中的turtle模块制图 前面已经讲了递归的原理,这里用递归作图来直观的理解递归. 首先了解以下Python中用于作图的内置海龟作图系统turtle module. Python内置 ...
- 数据结构与算法(Python版)二十二:递归可视化(谢尔宾斯基三角形)
谢尔宾斯基Sierpinski三角形 分形构造, 平面称谢尔宾斯基三角形, 立体称谢尔宾斯基金字塔 谢尔宾斯基三角形:作图思路 根据自相似特性, 谢尔宾斯基三角形是由3个尺寸减半的谢尔宾斯基三角形按照 ...
- 分形——谢尔宾斯基三角形
分形--谢尔宾斯基三角形 普通几何学研究的对象,一般都具有整数的维数.比如,零维的点.一维的线.二维的面.三维的立体.乃至四维的时空.在20世纪70年代末80年代初,产生了新兴的分形几何学(fract ...
- 简单分形(谢尔宾斯基三角形和地毯)
对于分形,我的理解就是:由小元件组成整体,然后再用另一或相同整体替换元件形成的循环迭代图形. 下面以谢尔平斯基三角形为例,介绍下最简单的分形思路. 第一步,先构造一个正三角形,取正三角形三边中点并连线 ...
- 混沌与分形(一):谢尔宾斯基三角形与门格海绵
研究混沌运动,少不了对分形理论的探讨.分形:通常被定义为"一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状",即具有自相似的性质. 本篇将从 ...
- 谢尔宾斯基三角形GUI
源代码:https://github.com/ltoddy/Python-useful sierpinskitriangle.py from tkinter import *class Sierpin ...
- 小练手:用Canvas绘制谢尔宾斯基三角形
转载<小练手:用Canvas绘制谢尔宾斯基三角形> 补充 作者第二种画法的完整程序: PS:修改function SierpinskiTriangle(p,len,depth = 9)中d ...
最新文章
- 一天学完spark的Scala基础语法教程五、闭包(idea版本)
- Android项目实战视频教程_快递轨迹查询应用开发
- word2vector数据集样式_这样做数据可视化驾驶舱,高端大气,一目了然,领导不点赞都难...
- Web页面请求的历程(从应用层到链路层)
- Android高级开发面试题目,再也不用担心不能升职加薪了。
- Linux DHCP服务详解
- 微信公众平台开发(51)会员卡
- AI人工智能开发的5种最佳人工智能编程语言
- 第一章 计算机组成原理 ---- 概述
- 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第四节课笔记
- 尚学堂马士兵_Struts2下载完成
- 病毒之Worm.Win32.AutoRun
- HTML表单元素、标签、iframe内联框架 详细代码图解
- 这个【vue】项目,让我明白了…
- 基于JAVA游泳馆信息管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- React项目使用craco(由create-react-app创建项目)
- 中国大数据产业版图:东南沿海继续引领 独角兽扎堆北上深杭
- 研究OCL功率放大电路的输出功率和效率
- js效果 div跟随鼠标移动
- 复盘实战营一期毕业典礼----HHR计划----以太入门课--第一课