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

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

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

C++迭代器失效的避坑指南

《C++迭代器失效的避坑指南》在C++中,迭代器(iterator)是一种类似指针的对象,用于遍历STL容器(如vector、list、map等),迭代器失效是指在对容器进行某些操作后... 目录1. 什么是迭代器失效?2. 哪些操作会导致迭代器失效?2.1 vector 的插入操作(push_back,

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解