zoukankan      html  css  js  c++  java
  • 分形之概率学下的green tree

         今天做的是分形之随机概率,可以和以前做的那个抛色子的做法非常相似,抛色子是用随机点数控制图形,今天做的树叶图形只是用概率的做法去控制图形而已,做法是如出一辙的:

    //图形界面

    package tree0618;

    import java.awt.Color;

    import java.awt.FlowLayout;

    import java.awt.Graphics;

    import java.awt.Graphics2D;

    import javax.swing.JFrame;

    public class treeJF extends JFrame {

    public static void main(String[] args) {

    treeJF fl=new treeJF(

      fl.initUI();

    }

    public void initUI(){

    getContentPane().setBackground(Color.BLACK);

    setTitle("treeFlower");

    setSize(600,500);

    setDefaultCloseOperation(3);

    setLocationRelativeTo(null);

    setLayout(new FlowLayout());

    setVisible(true);

    Graphics g = getGraphics();

    ((Graphics2D) g).setColor(Color.green);

    treeListener tl = new treeListener();

    addMouseListener(tl);

    tl.setGraphics(g);

    }

    }

    //具体的实现

    package tree0618;

    import java.awt.Color;

    import java.awt.Graphics;

    import java.awt.Graphics2D;

    import java.awt.event.MouseEvent;

    import java.awt.event.MouseListener;

    import java.util.Random;

     

    public class treeListener implements MouseListener {

    float x=0, y=0;

    float a, b, c, d, e = 0, f;

    private Graphics g;

    public Color color;

    public int i;

    public float x1, y1;

    public void setGraphics(Graphics gra) {

    g = (Graphics2D) gra;

    }

    public void mouseClicked(MouseEvent e) {

    Random rand = new Random();

    for (int i = 0; i < 10000; i++) {

    int s = rand.nextInt(100);  //表示总共有100个随机数

    if (s < 10) {  //0-9,表示概率是十分之一

    a = 0;b = 0;c = 0;d = (float) 0.16;f = 0;

    } else if (s < 18) {  //表示的是10-17,概率为0.18

    a = (float) 0.5;b = (float) -0.26;c = (float) 0.23;d = (float) 0.22;f = (float) 1.6;

    } else if (s < 26) {  //19-25,表示概率为0.07

    a = (float) -0.15;b = (float) 0.28;c = (float) 0.26;d = (float) 0.24;f = (float) 0.14;

    } else {  //其他的则为26-100,概率是0.75

    a = (float) 0.35;b = (float) 0.04;c = (float) -0.04;d = (float) 0.85;f = (float) 1.6;

    }

    //图形的运算公式

    x1 = a * x + b * y;

    y1 = c * x + d * y + f;

    x = x1;

    y = y1;

    //g.drawLine((int)(x1*(-50)+300),(int)(y1*(-50)+400),(int)(x1*(-50)+500),(int)(y1*(-50)+500));这种写法是错误的,注意:随机数表示的是无数个点,所以不是画线是画点

     

    g.drawLine((int)(x1*(-50)+300),(int)(y1*(-50)+500),(int)(x1*(-50)+300),(int)(y1*(-50)+500));

    }

    x=0;

    y=0;

    }

    //对比抛色子:if (i < 4) {

    // 画四个点

    t = e.getX();

    h = e.getY();

    g.drawLine(t, h, t, h);

    // 分别存储四个点

    if (i == 0) {

    t1 = t;

    h1 = h;

    }

     

    else if (i == 1) {

    t2 = t;

    h2 = h;

    }

     

    else if (i == 2) {

    t3 = t;

    h3 = h;

    }

     

    else if (i == 3) {

    t4 = t;

    h4 = h;

    }

    i++;

    } else {

    Random rand = new Random();

    for (j = 0; j < 200000; j++) {

    int s = rand.nextInt(3);

    if (s == 0) {// 如果选中的是A点

    t4 = (t1 + t4) / 2;

    h4 = (h1 + h4) / 2;

    } else if (s == 1) {// 如果选中的是B点

    t4 = (t2 + t4) / 2;

    h4 = (h2 + h4) / 2;

    } else {// 如果选中的是C点

    t4 = (t3 + t4) / 2;

    h4 = (h3 + h4) / 2;

    }

    g.drawLine(t4, h4, t4, h4);

    i = 0;

    }

    }

    // System.out.println(m+"   "+x);

     

    public void mousePressed(MouseEvent e) {

     

    }

     

    public void mouseReleased(MouseEvent e) {

     

    }

     

    public void mouseEntered(MouseEvent e) {

    }

     

    public void mouseExited(MouseEvent e) {

     

    }

     

    public static void main(String[] args) {

    }

     

    }

    运行结果为:

     

     

  • 相关阅读:
    打包时内容过多,node 报错:内存溢出 javascript heap out of memory
    css样式-旋转rotate
    移动端相关事件
    input文本框的事件
    vue项目在IE11下报错Promise未定义
    解疑常用
    table-layout
    7.24 每日学习作业总结概括
    7.23 每日学习作业总结
    控制流程之while循环
  • 原文地址:https://www.cnblogs.com/java-7/p/5608870.html
Copyright © 2011-2022 走看看