分型与迭代(谢尔宾斯基三角形)总结

2023-11-11 03:30

本文主要是介绍分型与迭代(谢尔宾斯基三角形)总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

7月6日 分型与迭代总结(谢尔宾斯基三角形)

 

        胡哥说,酷只要能画出一个点,就能画出这个世界。现在我对这句话深信不疑了。这几天,接触到了不少的漂亮的用代码“写”出的图片,我越来越觉得Java是个神奇的东西。

 

        前天我画出了一个镯子,昨天又画了几个细胞,觉得好有意思啊。昨天冥思苦想了半天,终于把胡哥让画的谢尔宾斯基三角形画出来了,尴尬好有成就感啊。
 
        开始时我弄错了要连线的点,导致画出的三角形只划分了中间的。后来我发现其实每个需要划分的三角形就是跟原先最大的三角形是一样的,我觉得我顿悟了递归的涵义啦啦啦酷

 

        下面是我的谢尔宾斯基三角形的代码。

这是Asanjiaoxxing类:

import java.awt.Dimension;
import java.awt.Graphics;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;//定义一个DrawFrame继承自JFramepublic class Asanjiaoxing extends JFrame{//设置全局变量Graphics g;JTextField jtf1,jtf2;private static final long serialVersionUID = 1L;//函数入口public static void main(String[] args) {//实例化一个DrawFrameAsanjiaoxing df = new Asanjiaoxing();		//调用UnitGui函数 df.UnitGui();		}		public void UnitGui(){//设置窗体的属性值this.setTitle("谢尔宾斯基三角形");this.setSize(new Dimension(600,500));this.setDefaultCloseOperation(3);this.setLocationRelativeTo(null);//实例化一个面板JPanel jp = new JPanel();//实例化一个标签对象JLabel jl1  = new JLabel("请输入边长:");jp.add(jl1);//实例化一个文本框JTextField jtf1 = new JTextField(5);jp.add(jtf1);this.jtf1 = jtf1;//实例化一个标签对象JLabel jl2  = new JLabel("请输入循环次数:");jp.add(jl2);//实例化一个文本框JTextField jtf2 = new JTextField(5);jp.add(jtf2);this.jtf2 = jtf2;this.add(jp);this.setVisible(true);this.g =this.getGraphics();MouseL ml = new MouseL(g,jtf1,jtf2);this.addMouseListener(ml);}}			

 这是监听器:

 

package zyf_0706;import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.JTextField;public class MouseL implements MouseListener {Graphics g ;JTextField jtf1,jtf2;int count;public MouseL(Graphics g,JTextField jtf1,JTextField jtf2){this.g = g;this.jtf1 = jtf1;this.jtf2 = jtf2;}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stubint x1,y1,length,n;x1 = e.getX();y1 = e.getY();length = (int)Double.parseDouble(jtf1.getText());n = (int)Double.parseDouble(jtf2.getText());this.count=n;double x2,y2,x3,y3;int a1,b1,a2,b2,a3,b3;x2 = x1+length;y2 = y1;x3 = x1+length/2;y3 = y1-length/2*Math.sqrt(3);a1 = x1;a2 = (int)x2;a3 = (int)x3;b1 = y1;b2 = (int)y2;b3 = (int)y3;g.drawLine(a1,b1,a2,b2);g.drawLine(a1,b1,a3,b3);g.drawLine(a2,b2,a3,b3);draw(a1,b1,a2,b2,a3,b3,count);}//定义一个画三角形的方法public void draw(int x1,int y1,int x2,int y2,int x3,int y3,int count){int A1,B1,A2,B2,A3,B3;if(count>0){count--;			A1=(x1+x2)/2;A2=(x1+x3)/2;A3=(x2+x3)/2;B1=(y1+y2)/2;B2=(y1+y3)/2;B3=(y2+y3)/2;g.drawLine(A1,B1,A2,B2);g.drawLine(A1,B1,A3,B3);g.drawLine(A2,B2,A3,B3);this.draw(A1, B1, A2, B2, x1, y1,count);this.draw(A1, B1, x2, y2, A3, B3,count);this.draw(x3, y3, A2, B2, A3, B3,count);	}else{return;}}@Overridepublic void mouseEntered(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent arg0) {// TODO Auto-generated method stub}}

 

下面是我画的几个:

 

这篇关于分型与迭代(谢尔宾斯基三角形)总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/387255

相关文章

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Mybatis从3.4.0版本到3.5.7版本的迭代方法实现

《Mybatis从3.4.0版本到3.5.7版本的迭代方法实现》本文主要介绍了Mybatis从3.4.0版本到3.5.7版本的迭代方法实现,包括主要的功能增强、不兼容的更改和修复的错误,具有一定的参考... 目录一、3.4.01、主要的功能增强2、selectCursor example3、不兼容的更改二、

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭