之前,我们在蓝杰学习了分形图形的画法,分形不跟其他的程序一样,基础的学习之后,我们发现,分形就是通过简单的循环递归,或者根据某种规律实现一步步的画图,画出一些根据某种特殊关系形成的图形。

拿最基础的我们画过了谢尔宾斯基三角形,和一些简单的通过函数画成的图形来说:

谢尔宾斯基三角形

画谢尔宾斯基三角形的重点是,掌握好每次的递归规律:

首先它的递归规律是,先画出一个大三角形A,然后再取出它的各个边中点连接,之后再把每个边上的三角形当成一个大三角形A,重复上面的步骤。

下面是代码:

/*** 1.画谢尔宾斯基三角形* @param count 循环的次数*/
public void drawSJX(double x1,double y1,double x2,double y2,double x3,double y3,int count){//第一次循环时画出最大的三角Aif(count==10){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);}//开始递归if(count>0){//画大三角A的中位线g.drawLine((int)(x1+x3)/2, (int)(y1+y3)/2,(int)(x2+x3)/2,(int) (y2+y3)/2);g.drawLine((int)(x1+x3)/2, (int)(y1+y3)/2,(int)(x2+x1)/2, (int)(y2+y1)/2);g.drawLine((int)(x2+x3)/2,(int) (y2+y3)/2,(int) (x2+x1)/2, (int)(y2+y1)/2);//分别把角上三个小三角当作大三角A重复画中位线的步骤drawSJX(x1,y1,(x2+x1)/2,(y2+y1)/2,(x1+x3)/2,(y1+y3)/2,count-1);       drawSJX((x2+x1)/2,(y2+y1)/2,x2,y2,(x2+x3)/2,(y2+y3)/2,count-1);     drawSJX((x1+x3)/2,(y1+y3)/2,(x2+x3)/2,(y2+y3)/2,x3,y3,count-1);}    }

之后再在按钮实现类里编写相关画图的方式:

//实现接口中的方法
public void actionPerformed(ActionEvent e) {String str=e.getActionCommand();System.out.println("str="+str);//开始绘制图形if(str.equals("谢尔宾斯基三角形")){double x1=100,y1=600;double x2=600,y2=600;double x3=(x2+x1)/2,y3=y1-Math.sqrt(3.00d)*(x3-x1);int count=10;drawSJX( x1, y1, x2, y2, x3, y3,count);}else if(str.equals("清空")){g.clearRect(100, 130, 980, 628);}    }



 

简单函数画图

除了通过递归,我们也画过通过一些函数关系式而得到的图像,画这些图形的关键是,掌握好每次画点的变化。

函数图形理论上没有通过递归要画的图像抽象,不需要自己去发现它变化的规律,不用自己定义变化的规则,因为已经知道了确切的关系式,我们需要做的就是通过画一个个点的累积,最后形成一个图形,但是画函数图形的核心也在这里,虽然已经知道给定的变化关系式,但是要画出图形使其可视化,函数点的变化范围必须要在电脑范围内,所以在画点上就要做相应的处理,通过各种扩大缩小点的坐标变换,使其能够展现在电脑屏幕上。

首先是几个比较简单的函数做成的图形,同一个函数使用不同的参数,也可以展现出不同的函数图形:

<!--EndFragment-->

下面是代码:

if(str.equals("函数图形一")){//float a = 1.5f, b = -1.8f, c = 1.6f, d = 0.9f ;float a = -1.4f, b = 1.6f, c = 1.0f, d = 0.7f ;//float a = 1.1f, b = -1.0f, c = 1.0f, d = 1.5f; //float a = 1.6f, b = -0.6f, c = -1.2f, d = 1.6f; //float a = 1.3f, b = 1.7f, c = 0.5f, d = 1.4f;//float a = 1.7f, b = 1.7f, c = 0.06f, d = 1.2f ;double x1=300;double y1=300;int x3,y3;for(i=0;i<100000;i++){double x2=Math.sin(a*y1)+c*Math.cos(a*x1);double y2=Math.sin(b*x1)+d*Math.cos(b*y1);x3=(int)(x2*100+500);y3=(int)(y2*100+500);g.setColor(color);g.drawLine(x3, y3, x3,y3);x1=x2;y1=y2;}}else if(str.equals("函数图形二")){//float a = 1.4f, b = -2.3f, c = 2.4f, d = -2.1f;//float a = 2.01f, b = -2.53f, c = 1.61f, d = -0.33f;//float a = -2.7f, b = -0.09f, c = -0.86f, d = -2.2f;//float a = -2.24f, b = 0.43f, c = -0.65f, d = -2.43f;float a = -2, b = -2, c = -1.2f, d = 2 ;double x1=300;double y1=300;int x3,y3;for(i=0;i<100000;i++){double x2=Math.sin(a*y1)-Math.cos(b*x1);double y2=Math.sin(c*x1)-Math.cos(d*y1);x3=(int)(x2*100+500);y3=(int)(y2*100+500);g.drawLine(x3, y3, x3,y3);x1=x2;y1=y2;}}else if(str.equals("ring")){float a = 1.40f, b = 1.56f, c = 1.40f, d = -6.56f ;double x1=300;double y1=300;int x3,y3;for(i=0;i<80000;i++){double x2=d*Math.sin(a*x1)-Math.sin(b*y1);double y2=c*Math.cos(a*x1)+Math.cos(b*y1);x3=(int)(x2*40+500);y3=(int)(y2*40+500);g.drawLine(x3, y3, x3,y3);x1=x2;y1=y2;}}

<!--EndFragment-->

其中有好多有趣的图像,像海豚、笑脸之类的,之后可以作为团队分形项目的部分图形。

但是之前考虑过要给图形加上渐变色,使图像更加漂亮,但是渐变色的代码还没有完全搞懂,正在考虑中。

还有一些通过其他函数的迭代,包含概率的一些分形图形的画法,还没有搞懂所以图形还画出……不过之前想通过Java画出著名的笛卡尔心形曲线(感觉比较有趣。。),

但是多次尝试未果……上网查资料时找到了有人画出来的据说3D心形线贴出来看看……(虽然觉得吧不怎么像……

<!--EndFragment--><!--EndFragment--><!--EndFragment-->


 

由于是网上拷的代码,因为源代码不是Java编译而是C++编译的,自己做的只是改了一下使它能在java平台上运行,具体的画法还是没怎么看懂,只是好看就粘来玩玩………………-_- !……………………

<!--EndFragment-->

else if(str.equals("心形曲线")){double x, y, r;  for (int i1 = 0; i1 < 90; i1++) {  for (int j = 0; j < 90; j++) {  r = Math.PI / 45 * i1 * (1 - Math.sin(Math.PI / 45 * j)) * 18;  x = r * Math.cos(Math.PI / 45 * j) * Math.sin(Math.PI / 45 * i1)  + 1000/ 2;  y = -r * Math.sin(Math.PI / 45 * j) + 700/ 4;  // 绘制椭圆  g.fillOval((int) x, (int) y, 2, 2);  }  }  }else if(str.equals("心形曲线2")){double x, y, r;  for (int i1 = 0; i1 < 90; i1++) {  for (int j = 0; j < 90; j++) {  r = Math.PI / 30 * i1 * (1 - Math.sin(Math.PI / 30 * j)) * 18;  x = r * Math.cos(Math.PI / 30 * j) * Math.sin(Math.PI / 30 * i1)  + 1000/ 2;  y = -r * Math.sin(Math.PI / 30 * j) + 700/ 4;  // 绘制椭圆  g.fillOval((int) x, (int) y, 2, 2);  }  }  }else if(str.equals("调色")){//调色板color = JColorChooser.showDialog(null, "颜色选择",Color.BLACK);System.out.println("Color = "+color);System.out.println("哈哈哈");}else if(str.equals("清空")){g.clearRect(100, 130, 980, 628);}

<!--EndFragment-->

<!--EndFragment-->

关于简单分形图形的绘制相关推荐

  1. OpenCv Java 简单的图形轮廓绘制 (5)

    初学Opencv实现一点点的功能都感觉很是吃力,所以不得不写点东西记忆一下,不然明天又忘记了 好记星不如烂笔头 我就想能不能处分出图片中的正方形和圆形,标记出来,我们这边就绘制器图像,下一步就是认识图 ...

  2. python绘制分形图形_Python绘制L-System的分形图

    Python绘制L-System的分形图代码及解析. 完整代码如下 # -*- coding: utf-8 -*- #L-System(Lindenmayer system)是一种用字符串替代产生分形 ...

  3. openCV绘制简单Sierpinski(分形)图形

    运行环境:openCV4 C++ X64 对于分形图像一般具有一个主要性质 自相似性 分形图形的局部和整体一般具有相似的结构,细节上具有递归的特性,细节可以达到无限小,但是可以预测. 我们利用这个性质 ...

  4. 利用matlab绘制简单IFS图形(Sierpinski三角形和BarnsleyFern巴恩斯利蕨)

    利用matlab绘制简单IFS图形(Sierpinski谢尔宾斯基三角形和BarnsleyFern巴恩斯利蕨) 一.SierpinskiTriangle谢尔宾斯基三角形 谢尔宾斯基三角形(英语:Sie ...

  5. 【Qt】2D绘图之绘制简单的图形

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制图形 04. 画笔和画刷 05. 绘制弧线 06. 附录 01. 概述 Qt中提供了强大的2D绘图系统,可以使用同一A ...

  6. java代码绘制简单的图形

    教大家如何用循环嵌套绘制几个简单的图形! 在一个循环语句内部再嵌套一循环或多个循环,称为嵌套循环.while.do-while与for循环可以任意嵌套多层. 下面我们先来打印一个矩形. /*打印矩形. ...

  7. JAVA————简单的图形绘制界面(教程)

    JAVA----简单的图形绘制界面 我们先要清楚,绘制界面需要什么东西. 1.需要一个窗体来显示我们的界面. 2.需要一个组件(画笔)来让我们绘制图形. 3.需要监听来判断我们选择的画笔以及鼠标对画布 ...

  8. Matlab:数学之美--绘制分形图形

    Matlab:数学之美–绘制分形图形 学习最好的动力是兴趣,所以我们先看看效果: 这一篇与Java学习日记:数学之美-分形图形绘制有共同之处,只是所用的工具不同. clear; %不同的参数有不同的图 ...

  9. 山西计算机信息技术八年级教案,八年级信息技术 1.2 简单的图形绘制教案 山西版...

    <八年级信息技术 1.2 简单的图形绘制教案 山西版>由会员分享,可在线阅读,更多相关<八年级信息技术 1.2 简单的图形绘制教案 山西版(2页珍藏版)>请在人人文库网上搜索. ...

最新文章

  1. 解读《德勤2017年全球CIO报告》:顶级CIO的炼成之道
  2. Redhate5.4下Oracle 11g安装
  3. 为什么维护工作让数据中心工作人员夜不能寐?
  4. Python基本图形绘制之“蟒蛇绘制”
  5. git的常用操作(个人整理使用)
  6. [Cordova]JS和Native交互实现关键代码(iOS)
  7. [置顶] SPL讲解(6)--Condition篇
  8. VS中warning MSB8012:TargetPath与 Linker 的 OutputFile 属性值不匹配
  9. 开源终端上网行为管理服务器编译环境搭建
  10. 计算机启动黑屏时间很长,win7开机黑屏时间长怎么办?win7开机黑屏很久解决办法...
  11. Volley读取文档和图片
  12. 3月30日----4月3日二年级课程表
  13. vue对象属性为null_vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题...
  14. uniapp自定义导航栏与手机状态栏重叠问题
  15. 一元二次方程的简单回顾
  16. 用java编写一个美元汇率转换,编写一个人民币和美元的双向汇率转换程序,实现美元和人民币转换,汇率:1美元=6.92人民币...
  17. 抖音算法实习生面经(一面+二面)
  18. JAVA基础知识——方法的参数,特殊数据类型,装箱和拆箱...
  19. (1)英特尔工业边缘洞见平台(EII)安装指南
  20. 基因调控网络群体机器人(1)

热门文章

  1. 安卓手机通讯录丢失怎么办教程
  2. 微前端ice-stark主应用与子应用间的通信
  3. html语言写文章,关于:HTML的10篇文章推荐
  4. 骁龙芯片性能排行2020_9月安兔兔性能排行榜公布,骁龙865霸榜,iQOO独占鳌头
  5. C++ 如何遍历数组
  6. 软件工程毕业设计课题(3)基于python的毕业设计python电子书小说网站系统毕设作品源码
  7. 当蓝海不再蓝,2015这一年的手游圈怎么了?
  8. 如何在 IOP 期刊上发表论文
  9. 区块链游戏开发颠覆传统游戏开发的 5 种方式
  10. HTML URL转义字符