最近学习的内容主要是和分形图形有关。
首先,是用循环做出了很多比较奇怪但是美丽的图形。不得不说,是好好体验了一次数学之美。
@Override public void mousePressed(MouseEvent e) { x1=e.getX(); y2=e.getY(); command = bg.getSelection().getActionCommand(); } @Override public void mouseReleased(MouseEvent e) { if("Definition".equals(command)){ System.out.println("!!!!!"); for(int i=1;i<100000;i++){ double a=1.7, b= 1.7, c= 0.06, d = 1.2; x2=Math.sin(a*y1) +c*Math.cos(a*x1); y2=Math.sin(b*x1) +d*Math.cos(b*y1); x=50*x2+300; y=50*y2+150; g.drawLine((int)x,(int)y,(int)x,(int)y); g.setColor(Color.blue); System.out.println("x坐标"+x+"y坐标"+y); x1=x2; y1=y2; } } else if("ring".equals(command)){ for(int i=1;i<100000;i++){ double a = 1.40, b = 1.56, c = 1.40, d = -6.56 ; x2 = d*Math.sin(a*x1)-Math.sin(b*y1); y2= c*Math.cos(a*x1) + Math.cos(b*y1); x=45*x2+300; y=45*y2+200; g.drawLine((int)x,(int)y,(int)x,(int)y); System.out.println("x坐标"+x+"y坐标"+y); x1=x2; y1=y2; }
看着很漂亮,其实代码比较简单,主要是运用一些函数。
紧急着我们学习了递归。以前自己没有接触过,所以从最简单的开始。递归里面经典的Fibonacci序列开始学习。
package cn.netwkr0316; public class Fibonacci { /** * 递归求兔子的数量 */ private int rabbit=1; public int returnNumber(int month) { if(month>=3) { rabbit=returnNumber(month-1)+returnNumber(month-2); } else rabbit=1; return rabbit; } public static void main(String[] args) { Fibonacci rabbit =new Fibonacci(); System.out.println(rabbit.returnNumber(6)); } }
这其中自己遇到了一些问题。其实很多是细节问题。比如传入参数的顺序,在方法定义里面与递归调用里面不同。导致看到的就是十分奇怪的图形。后来发现这个问题之后,调整之后写出来了。
接下来是做谢宾斯三角形。一开始因为自己思路的错误,始终都只能画出一边来,后来改正思路,之后,又因为一些小细节出错了。最后才终于修成正果。
public void mouseClicked(MouseEvent e) { x1=e.getX(); y1=e.getY(); //画最大的三角形 x2=x1+400; y2=y1; x3=(x1+x2)/2; y3=y1-Math.sqrt(3.00d)*(x3-x1); g.setColor(new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255))); g.drawLine((int)x1, (int)y1, (int)x2,(int) y2); g.drawLine((int)x1, (int)y1, (int)x3,(int) y3); g.drawLine((int)x2, (int)y2, (int)x3,(int) y3); drawSJX(x1,y1,x2,y2,x3,y3,count); drawSJX1(x1,y1,x2,y2,x3,y3,count); drawSJX2(x1,y1,x2,y2,x3,y3,count); } public void drawSJX(double x1,double y1,double x2,double y2,double x3,double y3,int count){ x4=(x1+x3)/2; x5=(x2+x3)/2; x6=(x2+x1)/2; y6=(y1+y2)/2; y4=(y1+y3)/2; y5=(y2+y3)/2; count--; g.drawLine((int)x4, (int)y4, (int)x5,(int)y5); g.drawLine((int)x4, (int)y4, (int)x6,(int)y6); g.drawLine((int)x5, (int)y5, (int)x6,(int)y6); g.drawLine((int)(x1+x4)/2,(int)(y1+y4)/2,(int)(x6+x4)/2,(int)(y6+y4)/2); g.drawLine((int)(x1+x6)/2,(int)(y1+y6)/2,(int)(x6+x4)/2,(int)(y6+y4)/2); g.drawLine((int)(x1+x4)/2,(int)(y1+y4)/2,(int)(x1+x6)/2,(int)(y1+y6)/2); x2=x6; y2=y6; x3=x4; y3=y4; if(count>0){ //画中间的三角形 drawSJX(x1,y1,x2,y2,x3,y3,count); drawSJX(x2,y2,x3,y3,x1,y1,count); drawSJX(x3,y3,x1,y1,x2,y2,count); System.out.println("打印啦!1"); } else{ return; }
这是比较核心的代码,drawSJX是分三个方向,分别画的。
最后做的是科赫曲线,这是一个让我比较捉急的曲线。画了挺久的,最后在参考了一下大家的各种思路,自己选择了一个符合自己的。其实最主要的是顶点的问题。顶点有三种情况,要分开讨论。现在我画的这个,依然有点问题。
一开始是有个角往内,后面是右边的角不对。
level=3时的情况
level=7时的情况,感觉像心电图一类的,囧。
public void mouseClicked(MouseEvent e) { x1=e.getX(); y1=e.getY(); x2=x1+300; y2=y1; KochPaint(x1,x2,y1,y2,this.level); } public void KochPaint(double x1,double x2,double y1,double y2,int level){ if(level<=1){ g.setColor(new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255))); g.drawLine((int)x1, (int)y1, (int)x2, (int)y2); System.out.println("有输出~"); } else { double x3=(2*x1+x2)/3; double y3=(2*y1+y2)/3; double x4=(2*x2+x1)/3; double y4=(2*y2+y1)/3; double x5=0,y5=0; double k=(y4-y3)*(x4-x3); if(y3==y4){ x5=(x3+x4)/2; y5=y3-(x4-x3)*Math.sqrt(3)/2; } //左边那个角 else if(k<0){ y5=y4; x5=x1; } //右边那个角 else if(k>0){ y5=y2; x5=x3; } if(x3==x4){ x5=x3; y5=y3; } KochPaint(x1,x3,y1,y3,level-1); KochPaint(x3,x5,y3,y5,level-1); KochPaint(x4,x5,y4,y5,level-1); KochPaint(x4,x2,y4,y2,level-1); }
右边的角总是出错,目前仍在改进中~
相关推荐
基于springboot大学生就业信息管理系统源码数据库文档.zip
基于java的驾校收支管理可视化平台的开题报告
时间序列 原木 间隔5秒钟 20241120
毕业设计&课设_基于 Vue 的电影在线预订与管理系统:后台 Java(SSM)代码,为毕业设计项目.zip
基于springboot课件通中小学教学课件共享平台源码数据库文档.zip
基于java的网上购物商城的开题报告
Delphi人脸检测与识别Demo1fdef-main.zip
基于java的咖啡在线销售系统的开题报告
基于java的自助医疗服务系统的开题报告.docx
内容概要:本文档全面介绍了Visual Basic(VB)编程语言的基础知识和高级应用。首先概述了VB的基本特性和开发环境,随后详细讲述了VB的数据类型、变量、运算符、控制结构、数组、过程与函数、变量作用域等内容。接着介绍了窗体设计、控件使用、菜单与工具栏的设计,文件操作、数据库访问等关键知识点。最后讨论了VB的学习方法、发展历史及其在桌面应用、Web应用、数据库应用、游戏开发和自动化脚本编写等领域的广泛应用前景。 适合人群:初学者和中级程序员,尤其是希望快速掌握Windows桌面应用开发的人群。 使用场景及目标:①掌握VB的基础语法和开发环境;②学会使用VB创建复杂的用户界面和功能完整的应用程序;③理解数据库操作、文件管理和网络编程等高级主题。 其他说明:Visual Basic是一种简单易学且功能强大的编程语言,尤其适合用于开发Windows桌面应用。文中不仅覆盖了基础知识,还包括了大量的实用案例和技术细节,帮助读者快速提升编程技能。
基于java的疫情期间高校防控系统开题报告.docx
基于springboot+vue社区老年人帮扶系统源码数据库文档.zip
基于java的超市商品管理系统的开题报告.docx
基于SpringBoot房屋买卖平台源码数据库文档.zip
xdu限通院23微处理器系统与应用大作业(两只老虎),适应于汇编语言keil软件,
<项目介绍> - 新闻类网站系统,基于SSM(Spring、Spring MVC、MyBatis)+MySQL开发,高分成品毕业设计,附带往届论文 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
基于java的学生网上请假系统的开题报告.docx
社会经济繁荣发展的今天,电子商务得到了飞速发展,网上交易越来越彰显出其独特的优越性,在人们的日常生活中,出现了各种类型的交易网站。其中一个就是车辆易主交易网站,它是一个服务于用户买卖二手车辆的交易网站,为用户提供了平等互利、方便快捷的网上交易平台,通过这一类型的网站,用户可自由出售和购买车辆。 本课题主要根据车辆本身的特性,充分发挥互联网的特点与优势,构建一个以二手车辆为商品、基于互联网平台的车辆易主业务交易管理系统,并根据车辆易主业务交易管理系统的应用需求,进行需求分析,进而对网站系统作规划设计。采用IDEA为运行平台,以SSH为框架,运用HTML语言、JSP技术、MySql数据库、JSP与后台数据库链接等关键技术建设二手车网上交易系统,构建车辆易主交易系统的会员注册与登录,网站首页展示、用户发布商品车辆,用户求购商品车辆,分页浏览、购物系统、用户后台管理、管理员用户后台管理等功能,并使这些功能得以实现并更好为用户服务。网站整体构建完成且测试成功后,用户可以进入网站进行注册、登录,登录后,用户可以在网站上发布自己的闲置车辆或者寻找想要购买的车辆,还可以收藏车辆,管理发布和收藏的车辆,
SQLite3的向量扩展库,windows dll,版本0.1.5
基于C++实现(控制台)商品库存管理系统