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

//图形界面

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);  个随机数

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) {

}

 

}

运行结果为:

 

 

分形之概率学下的green tree的更多相关文章

  1. 1.为什么要从古典概率入门概率学《zobol的考研概率论教程》

    在入门概率论与数理统计这门课中,刚开始我们都会从古典概率开始学习,为什么要选择它呢?这是因为古典概率作为一种将生活中的事情简化为有限种情况,并假设它们的发生可能差不多的手段,十分的好用且简洁. 这里我 ...

  2. Linux下无法执行tree命令问题

    Linux下不能使用tree命令,是因为没有安装命令, 执行下面代码就行了 yum install tree -y

  3. Mac 下如何使用 Tree 命令

    方式一 Mac 系统下默认是不带这条命令的,执行下面这条命令也可以打印出树状结构. find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g' 不想每 ...

  4. Mac下命令行tree生成文件树

    不像Windows,Mac环境本身是没有tree命令的,但可以后天呐~ 1.下载文件包并将其放在系统目录下(本人存放路径为/Users/) https://homebrew.bintray.com/b ...

  5. linux下怎么用tree命令以树形结构显示文件目录结构?

    tree命令以树状图列出文件目录结构.不过某些Linux上(Centos 6.4)没有tree命令,本文将介绍安装方法. 常用参数: ? 1 2 3 4 5 6 tree -d 只显示目录.   tr ...

  6. OO方式下,ALV TREE和ALV GRID的不同之处

    作为大部分报表程序的基础,ALV GRID差不多是每个ABAP开发者必须了解和掌握的内容,因此网上也不乏相关资料,而ALV TREE的应用相对较少,中文资料也就比较少见了.实际上,ALV TREE和A ...

  7. linux下的device tree

    在我个人的理解,device tree就是描述硬件设备的,目前有什么配置,把这些配置信息告诉linux内核,让内核去识别,增强了内核的通用性,不用因为平台不同而每次都要编译新内核了. 配置device ...

  8. 保护眼睛,开启浏览器的夜间模式 顺便学下!important的作用

    打开笔记本程序,复制以下代码 *{background-image: none !important; background: none !important; background:#333333 ...

  9. 下拉框 tree 基于 EasyUi

    public string DataTableToJson() { string dataJson = ""; string temp = ""; string ...

随机推荐

  1. iOS 多线程GCD的基本使用

    <iOS多线程简介>中提到:GCD中有2个核心概念:1.任务(执行什么操作)2.队列(用来存放任务) 那么多线程GCD的基本使用有哪些呢? 可以分以下多种情况: 1.异步函数 + 并发队列 ...

  2. iOS 苹果开发证书失效的解决方案(Failed to locate or generate matching signing assets)

    从2月14日开始,上传程序的同学可能会遇到提示上传失败的提示. 并且打开自己的钥匙串,发现所有的证书全部都显示此证书签发者无效. 出现以下情况: Failed to locate or generat ...

  3. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q147-Q151)

    Question  147 Your company has an existing SharePoint 2010 public-facing Web site. The Web site runs ...

  4. iOS面试题总结(一)

    面试题总结 1.#import 跟#include.@class有什么区别?#import<> 跟 #import""又什么区别? include和#import都能完 ...

  5. iOS 疑难杂症 — — 在 Storyboard 里 Add Size Class Customization 后再从代码里无法修改的问题

    前言 公司的产品同时适配 iPhone 和 iPad ,并坚持用 Storyboard 来做适配,今天又踩一个坑(以前遇到过)还以为是 XCode 的鬼毛病. 声明  欢迎转载,但请保留文章原始出处: ...

  6. OAuth2.0 四种授权模式

    OAuth2.0简单笔记(四种授权模式) 金天:坚持写东西,不是一件容易的事,换句话说其实坚持本身都不是一件容易的事.如果学习有捷径,那就是不断实践,不断积累.写笔记,其实是给自己看的,是体现积累的一 ...

  7. WPF中,Combox的SelectedItem属性绑定成功后,未能默认显示上一次选择的结果。

    问题描述: Combox中,设定了绑定对象,但是在第一次进入时却没有显示上次选中的项.      1)查看SelectedItem对应绑定的值,也是有的(启动时,读取上次设置的结果,来初始化界面). ...

  8. Hadoop2.5.0 搭建实录

    目录: 第一步:准备相关材料 第二步:虚拟机环境搭建 第三步:用户信息 第四步 安装.配置Java环境 第五步 Zookeeper安装配置 第六步 Hadoop安装.配置 第七步:HBase安装部署 ...

  9. 【转】Linux常用命令大全

    原文地址:http://www.php100.com/html/webkaifa/Linux/2009/1106/3485.html 系统信息 arch 显示机器的处理器架构(1) uname -m ...

  10. 安装Ubuntu的那些事儿(续)

    由于我的第一篇Blog并没有给出完全解决进Ubuntu系统时显卡所造成的问题,至于那个装显卡驱动的方法本人也没有去做,感兴趣的朋友可以在网上教程试一试. 至于我的那个在高系选项中进行配置也不是好的方法 ...