分形之概率学下的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); 个随机数
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.为什么要从古典概率入门概率学《zobol的考研概率论教程》
在入门概率论与数理统计这门课中,刚开始我们都会从古典概率开始学习,为什么要选择它呢?这是因为古典概率作为一种将生活中的事情简化为有限种情况,并假设它们的发生可能差不多的手段,十分的好用且简洁. 这里我 ...
- Linux下无法执行tree命令问题
Linux下不能使用tree命令,是因为没有安装命令, 执行下面代码就行了 yum install tree -y
- Mac 下如何使用 Tree 命令
方式一 Mac 系统下默认是不带这条命令的,执行下面这条命令也可以打印出树状结构. find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g' 不想每 ...
- Mac下命令行tree生成文件树
不像Windows,Mac环境本身是没有tree命令的,但可以后天呐~ 1.下载文件包并将其放在系统目录下(本人存放路径为/Users/) https://homebrew.bintray.com/b ...
- linux下怎么用tree命令以树形结构显示文件目录结构?
tree命令以树状图列出文件目录结构.不过某些Linux上(Centos 6.4)没有tree命令,本文将介绍安装方法. 常用参数: ? 1 2 3 4 5 6 tree -d 只显示目录. tr ...
- OO方式下,ALV TREE和ALV GRID的不同之处
作为大部分报表程序的基础,ALV GRID差不多是每个ABAP开发者必须了解和掌握的内容,因此网上也不乏相关资料,而ALV TREE的应用相对较少,中文资料也就比较少见了.实际上,ALV TREE和A ...
- linux下的device tree
在我个人的理解,device tree就是描述硬件设备的,目前有什么配置,把这些配置信息告诉linux内核,让内核去识别,增强了内核的通用性,不用因为平台不同而每次都要编译新内核了. 配置device ...
- 保护眼睛,开启浏览器的夜间模式 顺便学下!important的作用
打开笔记本程序,复制以下代码 *{background-image: none !important; background: none !important; background:#333333 ...
- 下拉框 tree 基于 EasyUi
public string DataTableToJson() { string dataJson = ""; string temp = ""; string ...
随机推荐
- iOS 证书Bug The identity used to sign the executable is no longer valid 解决方案
现象:The identity used to sign the executable is no longer valid Please verify that your device’s cloc ...
- iOS 字号转换问题
一,ps和pt转换 px:相对长度单位.像素(Pixel).(PS字体) pt:绝对长度单位.点(Point).(iOS字体) 公式如下: pt=(px/96)*72. 二,字体间转换 1in = 2 ...
- 一起来学习Android自定义控件2-简单的写字板控件
概述 上一篇文章我们对自定义控件进行了一个大体的知识介绍.今天就来学习自定义一个简单的写字板控件. 先来看看效果图 就是简单的根据手指写下的轨迹去画出内容 实现 在上一篇文章里提到了android官方 ...
- iOS 疑难杂症 — — 复制 Storyborad 莫名崩溃
声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 复制无处不在,用 Story ...
- DP优化与换零钱问题
1 当贪心不再起效的时候 对于换零钱问题,最简单也是性能最好的方法就是贪心算法.可是贪心算法一定要满足面值相邻两个零钱至少为二倍关系的前提条件.例如1,2,5,10,20……这样的零钱组应用贪心最简单 ...
- MySQL学习笔记之数据类型
数据类型在所有的数据库使用当中,都是避免不了的部分.以前每次写SQL语句,对于定义成哪种数据类型总是迷迷糊糊,今天就来彻底弄清.以下介绍仅针对MySQL 5.5以上版本. 一.字符串类型 1.char ...
- MySQL错误日志总结
MySQL错误日志是记录MySQL 运行过程中较为严重的警告和错误信息,以及MySQL每次启动和关闭的详细信息.错误日志的命名通常为hostname.err.其中,hostname表示服务器主机名. ...
- PHP无限级分类的实现(不使用递归)
无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...
- Lucene索引文件学习
最近在做搜索,抽空看一下lucene,资料挺多的,不过大部分都是3.x了--在对着官方文档大概看一下. 优化后的lucene索引文件(4.9.0) 一.段文件 1.段文件:segments_5p和s ...
- Oracle分区表
先说句题外话- 欢迎成都天府软件园的小伙伴来面基交流经验~ 一:什么是分区(Partition)? 分区是将一个表或索引物理地分解为多个更小.更可管理的部分. 分区对应用透明,即对访问数据库的应用 ...