我们常常迷恋于梵高,塞尚,毕加索的作品,不管是超现实主义还是抽象主义,都给与我们以心灵的震撼与感慰。也曾简单的学过素描,不过本人天生对绘画完全免疫,把香蕉画成茄子的事情常有,现在接触到了编程,发现原来一些我们认为死板地公式也会绘制出美丽的图片
话不多说,我们先构造一个SampleDraw类的一个实例:
public class SampleDraw {
public static void main(String[] args){
SampleDraw sd = new SampleDraw();//构造对象
sd.showUI(); //调用绘制函数
}
Good!很明显,大家看到了showUI()这个方法,接下来我们就是在这个方法里来实现我们的“大作”
//实现我们的抽象画的方法
public void showUI(){
//当然,我们首先要先搞块画布
javax.swing.JFrame jf = new javax.swing.JFrame();
jf.getContentPane().setBackground(Color.white);
jf.setTitle("抽象画");
jf.setSize(680, 650);//
jf.setBackground(new Color(250,0,250));
jf.setDefaultCloseOperation(3);
jf.setLocationRelativeTo(null);
jf.setResizable(false);
jf.setVisible(true);
/*下面是我们画出我们的作品的公式,这里我找到了3个挺不错的公式,配上不同的初值,可以画出不同的美丽图片,大家可以多试下,很有成就感哦
当然,我们平时如果见到比较好的公式,都可以试一下
*/
//初始化x,y
double x = 0, y = 0;
//给公式中的常量赋值,改变常量值可以改变得到的效果图
//double a = -1.7, b = -2.41, c = -1.02, d = -1.11;
double a = 1.7, b = 2.3, c = 2, d = 1.2;
//double a = 2.3, b = -1, c = 1.9, d = 1.1;
//double a = -2.61, b = -3.12, c = -1.9, d = -1.8;
//double a = -2, b = -2, c = -1.2, d = 2;
//double a = 1.40, b = 1.56, c = 1.40, d = -6.56;
//使用循环计算出每次迭代的坐标,并通过画线函数完成绘制
for(int i = 0; i < 100000; i++){
//公式1
x = d * Math.sin(a * x) - Math.sin(b * y);
y = c * Math.cos(a * x) - Math.cos(b * y);
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 +330);
//公式2
//x = d * Math.sin(a * x) - Math.sin(b * y);
//y = c * Math.cos(a * x) + Math.cos(b * y);
//int m = (int) (d * Math.sin(a * x) - Math.sin(b * y) * 100 + 550);
//int n = (int) (c * Math.cos(a * x) + Math.cos(b * y) * 100 + 550);
//公式3
// x = d * Math.sin(a * y) - c * Math.cos(b * x);
// y = a * Math.sin(c * x) - b * Math.cos(d * y);
//
// int m = (int) ((Math.sin(a * y) - Math.cos(b * x) * 80 + 330));
// int n = (int) ((Math.sin(c * x) - Math.cos(d * y) * 80 + 330));
//给每个点上颜色
Graphics g = jf.getGraphics();//配置颜色
Color col = new Color(i%255, 0, i%255);//设定这次要花的颜色
g.setColor(col);
//g.setColor(new Color(0, 0, 0));
//画出这个点
g.drawLine(m, n, m, n);
}
}
试着运行一下,画面太美不忍看
大家赶快也动手试一下吧~
- 大小: 409.9 KB
- 大小: 103.4 KB
- 大小: 44.3 KB
分享到:
相关推荐
【IT十八掌徐培成】Java基础第05天-03.抽象类-抽象方法-修饰符组合.zip
Java --- 继承、抽象类
java设计模式----抽象工厂模式,简单工厂模式代码 代码内部
Java --- 接口、抽象类、方法重写
Java设计模式,抽象工厂的Demo,具体的思想与实现有很多讲得很好的老师,我是看厉风行老师的视频学的,讲得不错,简单易懂
(4) 实现接口Careable.java的抽象方法upKeep(), 输出 "车辆保养完毕! " 信息。 4. 在货物运输中,需要对运输车辆定位,以便随时跟随货物的位置信息。定位 功能可以使用 GPS,而考虑到能够实现定位功能的设备...
java 3 模块化与抽象编程-1649236423580.ppt
计算机后端-Java-Java核心基础-第17章 异常处理 02. 复习:抽象类.avi
自己写的设计模式 抽象工厂模式的Java源码,如果大家喜欢的话,就下载看看
计算机后端-Java-Java核心基础-第15章 面向对象07 06. 抽象类与抽象方法的使用.avi
java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...
计算机后端-Java-Java核心基础-第15章 面向对象07 12. 抽象类的课后练习.avi
计算机后端-Java-Java核心基础-第15章 面向对象07 07. 抽象的应用场景举例.avi
计算机后端-Java-Java核心基础-第15章 面向对象07 10. 创建抽象类的匿名子类对象.avi
计算机后端-Java-Java核心基础-第15章 面向对象07 09. 抽象性的练习:基本操作.avi
java设计模式之抽象工厂模式,实例----手机工厂,一个简单的例子,有助于理解抽象工厂模式。
Java基础之抽象类的基本使用方法,让你充分理解抽象类的相关知识。
java,设计模式中的一种,抽象工厂设计模式。