`

区区几行代码你可以完成逆袭,从此成为抽象派画家,有图有真相

 
阅读更多

        所谓抽象画就是不是写实再现(此处来自度娘),而我觉得它就是人的一种思维抽象的表达,它不按常理出牌,千变万化,在混乱中又有自己的规律,在混乱中又有自己独特的美,让人看见它时思绪万千。那种美让人无法名状,那种美也是不能再复制的。

        最近在学java基础课程的迭代方法,迭代是一种十分常见的算法,在数学中,迭代函数是在碎形和动力系统中深入研究的对象,而在代码的世界中我们可以利用迭代的思想结合一些迭代数学公式绘制一些美丽动人且充满艺术气息的抽象式图片。下面给大家分享一个刚刚完成的使用迭代思想来绘制图像的例子,区区几行代码你就可以成为抽象派的画家。几行代码你就可以做出如下的图片:
 

 


 
 

       具体实现如下:
        首先你要选择一个迭代的数学式子,百度一下很多,我选择的一个是(其中a,b,c,d为常数):

        

        
         其实这样的式子也就是我们中学时学的数列,知道当前值就可以计算出写一个值,一直下去,这就是迭代的思想。

         利用这个式子我们可以利用计算机计算出你想要数目的(X,Y)值,再使用java中的drawline(X,Y,X,Y)方法(当我们将画直线方法的起点坐标和末点坐标设置成一样的时候,绘制的就是一个点),将这些点绘制到画板上,并陪上颜色,就可以呈现一幅美丽的画了。下面是实现的具体代码(详细注释了):

/**
 * 一个公式,改变各个参数值,你就可以拥有各种各样的抽象图画,很神奇
 * 使用一个按钮控制绘制
 */
package 抽象图像;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Draw extends JFrame implements ActionListener {
	
	//将画布对象设置为类的属性,可以在类的方法中使用
	private Graphics g;
	
	//入口函数
	public static void main(String[] args) {
		Draw d = new Draw();
		d.init();
		
	}
	
	// 初始化画板
	public void init() {
		this.setTitle("神奇的函数");
		this.setSize(700, 700);
		this.setDefaultCloseOperation(3);
		this.setLayout(new FlowLayout());
		this.setLocationRelativeTo(null);
		this.getContentPane().setBackground(Color.black);
		this.setVisible(true);
		
		// 获取画布对象
		g = this.getGraphics();

		// 添加一个控制按钮
		JButton bu = new JButton("画图");
		bu.setActionCommand("draw");
		this.add(bu);
		bu.addActionListener(this);
	}
     
	//重写ActionLitener中的方法,在此实现绘制的方法
	public void actionPerformed(ActionEvent e) {
		
		//初始化x和y
		double x = 0, y = 0;
		
		//给公式的常量赋值,改变每个值可以得到不同的图像
		double a =-1.7, b = -2.5, c = -2, d = -2;
		
		//使用循环计算出每次迭代的值,并完成绘制
		for (int i = 0; i < 100000; i++) {
			
			//调用java中Math中的方法,计算函数值,计算出当前的x和y的值,下一次循环时用当前的x,y的值计算下一此的x和y的值,依次下去
			x = d * Math.sin(a * x) - Math.sin(b * y);
			y = c * Math.cos(a * x) + Math.cos(b * y);
			
			//由于画布坐标的特点,所以作如下处理(左上角为原点,竖直向下为Y轴,计算的值太小所以*100,+330是为了将隐藏的点平移到画布上来)
			int m = (int) ((d * Math.sin(a * x) - Math.sin(b * y)) * 100+330);
			int n = (int) ((c * Math.cos(a * x) + Math.cos(b * y)) * 100+350);
			
			//给每个点上颜色,并绘制
			g.setColor(new Color(250,i%255,i%155));
		        g.drawLine(m, n, m, n);

		}
	}
}
 

    改变式子中的常数(a,b,c,d)的值,会的到不一样的图片,同时记着给他们施以颜色,那样得到的图像会更动人,我尝试了换了几组数字,得到了几个图片,向大家展示一下,发挥你的想象的空间,绘制出更加NICE的图片:



 

 



 

         

 

 


 
 

  • 大小: 8.1 KB
  • 大小: 160.2 KB
  • 大小: 224.5 KB
  • 大小: 92.1 KB
  • 大小: 115.9 KB
  • 大小: 145.4 KB
  • 大小: 175 KB
  • 大小: 265.6 KB
  • 大小: 179 KB
  • 大小: 218.6 KB
10
2
分享到:
评论
16 楼 lpy3654321 2013-11-04  
有的时候一片黑,没有那个按钮.
15 楼 MNTMs 2013-11-03  
奔三的小生 写道
不错,建议楼主去读3D计算机图形学的研究生,跟多好的图形图像算法等着你

呵呵  谢谢建议
14 楼 奔三的小生 2013-11-03  
不错,建议楼主去读3D计算机图形学的研究生,跟多好的图形图像算法等着你
13 楼 蚂蚁路过 2013-11-03  
MNTMs 写道
蚂蚁路过 写道
感谢分享,顺便求倒数第三张图的a、b、c、d值

double a =-2, b = -30, c = -1.9, d = 1.9;

感谢~~
12 楼 MNTMs 2013-11-02  
蚂蚁路过 写道
感谢分享,顺便求倒数第三张图的a、b、c、d值

double a =-2, b = -30, c = -1.9, d = 1.9;
11 楼 luliangy 2013-11-02  
good~
10 楼 蚂蚁路过 2013-11-02  
感谢分享,顺便求倒数第三张图的a、b、c、d值
9 楼 fangxingjing 2013-11-02  
很不错。
8 楼 Wonder_234 2013-11-01  
手动赞一个  图真的好漂亮啊
7 楼 rex0654335 2013-11-01  
 
6 楼 hattah 2013-11-01  
MNTMs 写道
crysik 写道
童梦新苑 写道
不行啊, 哥们; 
启动了 一片全黑;

点一下画图就出来了

 

你们要点击画图按钮啊   才可也出现图像   画板的背景色设置成了黑色   这样为了增强效果


我运行的现象是黑屏,稍微缩小或放大程序,那个画图按钮就出来了

画图效果很不错,赞
5 楼 MNTMs 2013-11-01  
crysik 写道
童梦新苑 写道
不行啊, 哥们; 
启动了 一片全黑;

点一下画图就出来了

 

你们要点击画图按钮啊   才可也出现图像   画板的背景色设置成了黑色   这样为了增强效果
4 楼 shinwell 2013-11-01  
效果很赞,看到一片黑的几位童鞋,没有点“画图”那个按钮吧。
3 楼 lee_govern 2013-11-01  
有趣有趣有意思
2 楼 crysik 2013-11-01  
童梦新苑 写道
不行啊, 哥们; 
启动了 一片全黑;

点一下画图就出来了
1 楼 童梦新苑 2013-11-01  
不行啊, 哥们; 
启动了 一片全黑;

相关推荐

    递归程序设计详细介绍与实现

    递归是一种有趣的程序设计方法,往往区区几行代码就能达到神奇的效果。递归同时是一种非常数学化的方法,其背后有着深刻的数学原理。递归是程序设计方法王冠上的明珠,学会使用和优化递归是一个有灵魂的软件工程师与...

    Android代码-AndroidToolsExample

    Android开发在所难免的就是UI的预览和调整,一般情况下都是直接run看效果,或者是使用AS的preview预览,但这同样带来个小问题,就是你的测试内容会跟随着代码被打包到apk中,如果没做容错的处理很有可能将测试内容...

    python你TM太皮了——区区30行代码就能记录键盘的一举一动.pdf

    安装完成后,我们可以编写 Python 脚本来实现键盘记录器。下面是完整的代码: ``` from pynput import keyboard def on_press(key): try: print('alphanumeric key {0} pressed'.format(key.char)) except ...

    【收藏】SmartPrinter v3.4及v4.1 完美破解版

    这是本人使用的非常著名的虚拟打印机软件。经典的软件,不用多说。网上很流行 这里面有两个版本。都经过测试正常使用。...只需区区几行代码更可在后台完全繁琐的转换工作,文件转换过程中让您体验其难以想像的速度。

    《jQuery实战》 第二版.rar

    数十行javascript代码可以被神奇地压缩成区区几行。多少Web开发人员在那一瞬间深深地迷恋上了这个方便快捷、功能完备的利器。 《jQuery实战》是带领你自如驾驭jQuery的导航者。替你肃清学习和编程路上的各种障碍...

    操作系统真相还原

    《操作系统真相还原》通过简化示例,用区区6023行代码实现了一个功能完备的操作系统原型。它从基本的进程管理到复杂的内存管理和文件系统,都采用少量代码,力求使读者能快速学习和理解操作系统的核心概念。 本书的...

    基于事件的NIO多线程服务器打包

    server中只有区区几行就搞定了: //创建listener TimeHandler timer = new TimeHandler(); //获取Notifier Notifier notifier = Notifier.getNotifier(); //注册监听 notifier.addListener(timer); //申请端口 Server...

    C语言画心--初学C语言工整的代码风格与思路

    C语言画心案例,区区不到50行代码,学习C语言工整的代码风格与解决问题的思路。 访问我的专栏:https://zhuanlan.zhihu.com/sylucky,总有你需要的技术。

    安卓zxing 代码demo

    只用区区几行代码,就可以实现二维码的快速扫描。 二、定制化显示扫描UI 1.在values的colors文件下添加颜色,决定了二维码四个边框的颜色 &lt;color name="scan_corner_color"&gt;#0effc2&lt;/color&gt;2. 2.在drawable文件下...

    JSON JQUERY模板实现说明

    该解决方案用了区区二十几行代码,实现了别人要用几十甚至上百K的js库所做的工作.它就是John Resig 的 Microtemplating engine.大师Rick Strahl有一篇文章专门对此作了详细讲述(Client Templating with

    南昌新建区区本级公共服务事项清单.doc

    南昌新建区区本级公共服务事项清单.doc

    不可思议的动画只有区区七百k

    标题“不可思议的动画只有区区七百k”以及描述中的“放好几个小时”,揭示了视频压缩的高效性。一个只有700KB大小的文件竟然能承载足以播放数小时的动画,这背后蕴含着丰富的技术细节。 首先,我们来理解视频压缩的...

    全国行政区区,省、市、线面域图PPT.pptx

    全国行政区,省、市、线面域图,ppt格式

    XX年XX区区属国企改革重点工作实施方案.docx

    XX年XX区区属国企改革重点工作实施方案.docx

    XX区区属国有企业专职外部董事考核评价办法.docx

    在当前我国深化国有企业改革的背景下,XX区区属国有企业专职外部董事考核评价办法的出台,对于完善国有企业治理结构、提升决策质量、保障国有资产安全具有重要的意义。这一办法从制度层面明确了专职外部董事的职责...

    五省藏区区编版汉语第九册教学方案.doc

    五省藏区区编版汉语第九册教学方案.doc

    方庄东绿拆区区1#、2#楼及地下车库工程施工组织设计.zip

    5. **进度计划**:制定出详细的工程进度计划,通过甘特图或网络图展示各个施工阶段的时间节点,确保工程按期完成。 6. **质量控制**:提出质量管理体系,包括材料检验、工序验收、隐蔽工程检查等环节的质量标准和...

    c#学习笔记.txt

    有很多人用程序来表述爱情,在其中我能看到有Money,有Girl,有一些还涉及到Sex,但是我没有找到Love,我始终相信这世上有一种力量直接来自于爱情,到现在仍然相信。*/ C#(读作C sharp),是Microsoft公司新推出的...

    php小型模板引擎lovefc_Templatev1.65

    lovefc_Template是一个小巧,轻便,高效率的模板引擎,只有区区的十几k的大小,提供了一个模板引擎最为基础的功能,此外,还有一些对于模板语言的可扩展性,你完全可以利用它来打造自己的模板代码,更快方便的书写...

    国家和地区代码列表

    本文根据ISO 3166-1:2006(International Standard Norme Internationale) 英文版(含2007年补充说明)整理。与ISO 3166-1:1997相比,2006版新增的国家和地区已在备注栏中标出

Global site tag (gtag.js) - Google Analytics