Java抽象画--秒变绘图大师_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java抽象画--秒变绘图大师

Java抽象画--秒变绘图大师

 2014/11/8 22:08:21  木有鸟的脚  程序员俱乐部  我要评论(0)
  • 摘要:我们常常迷恋于梵高,塞尚,毕加索的作品,不管是超现实主义还是抽象主义,都给与我们以心灵的震撼与感慰。也曾简单的学过素描,不过本人天生对绘画完全免疫,把香蕉画成茄子的事情常有,现在接触到了编程,发现原来一些我们认为死板地公式也会绘制出美丽的图片话不多说,我们先构造一个SampleDraw类的一个实例:publicclassSampleDraw{publicstaticvoidmain(String[]args){SampleDrawsd=newSampleDraw();//构造对象sd
  • 标签:Java 抽象
我们常常迷恋于梵高,塞尚,毕加索的作品,不管是超现实主义还是抽象主义,都给与我们以心灵的震撼与感慰。也曾简单的学过素描,不过本人天生对绘画完全免疫,把香蕉画成茄子的事情常有,现在接触到了编程,发现原来一些我们认为死板地公式也会绘制出美丽的图片 

话不多说,我们先构造一个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
  • 查看图片附件
发表评论
用户名: 匿名