尝试使用递归方式实现一棵简单的分形树,给出初始点的坐标,在此基础上根据坐标轴旋转的规则计算出子树干与根节点的坐标关系,依次递归画出左子树干和右子树干,并提供一个递归的深度用于控制画的子树的数目。

在二维坐标系中,坐标轴旋转的公式如下:

In two dimensions, every rotation matrix has the following form,

This rotates column vectors by means of the following matrix multiplication,

So the coordinates (x',y') of the point (x,y) after rotation are

参考资料见维基百科旋转矩阵:http://en.wikipedia.org/wiki/Rotation_matrix

将这个分形树的实现添加到之前的绘图框架中,只需要增加一个Tree1类,然后再FractalPanel中调用此类的draw方法即可,并且在FractalMain类中添加相关的Button操作。Tree1类的实现如下:

package com.elvalad;

import java.awt.*;

/**
* Created by elvalad on 2015/1/4.
*/
public class Tree1 {
private double x;
private double y;
private double alpha;
private int depth;
private Color color = new Color(43, 77, 219); public Tree1(double x, double y, double alpha, int depth, Color color) {
this.x = x;
this.y = y;
this.alpha = alpha;
this.depth = depth;
this.color = color;
} public void draw(Graphics g) {
g.setColor(this.color);
this.drawShape(g, this.x, this.y, this.alpha, this.depth);
} private void drawShape(Graphics g, double x1, double y1, double angle, double depth) {
if (depth == 0) {
} else {
double x2 = x1 + Math.cos(Math.toRadians(angle)) * depth * 15.0;
double y2 = y1 + Math.sin(Math.toRadians(angle)) * depth * 15.0; Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setStroke(new BasicStroke((float) (0.5f * depth)));
g.drawLine((int)x1, (int)y1, (int)x2, (int)y2); drawShape(g, x2, y2, angle + 25, depth - 1);
drawShape(g, x2, y2, angle - 25, depth - 1);
}
}
}

Fractal Tree的更多相关文章

  1. Mysql存储引擎之TokuDB以及它的数据结构Fractal tree(分形树)

    在目前的Mysql数据库中,使用最广泛的是innodb存储引擎.innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择.当然,这偏文 ...

  2. 分形树Fractal tree介绍——具体如何结合TokuDB还没有太懂,先记住其和LSM都是一样的适合写密集

    在目前的Mysql数据库中,使用最广泛的是innodb存储引擎.innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择.当然,这偏文 ...

  3. Fractal Tree扩展

    之前的博客实现了最基础的分形树,在这个基础上略微调整一些参数可以得到很多有趣的由分形树发展出的图案. private void drawShape(Graphics g, double x1, dou ...

  4. 【Python 16】分形树绘制4.0(利用递归函数绘制分形树fractal tree)

     1.案例描述 树干为80,分叉角度为20,树枝长度小于5则停止.树枝长小于30,可以当作树叶了,树叶部分为绿色,其余为树干部分设为棕色. 2.案例分析 由于分形树具有对称性,自相似性,所以我们可以用 ...

  5. TokuDB存储引擎

    TokuDB是Tokutek公司开发的基于ft-index(Fractal Tree Index)键值对的存储引擎. 它使用索引加快查询速度,具有高扩展性,并支持hot scheme modifica ...

  6. Percona TokuDB

    Percona TokuDB Percona TokuDB 1.     TokuDB说明 2.     TokuDB安装 3.     使用TokuDB 3.1 快速插入和富索引 3.2 聚集sec ...

  7. Centos 6.5 Percona 5.6.27 Tokudb 配置

    参考 https://www.percona.com/doc/percona-server/5.6/tokudb/tokudb_installation.html # wget https://www ...

  8. 单表60亿记录等大数据场景的MySQL优化和运维之道

    此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据 ...

  9. 【转】单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构

    此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据 ...

随机推荐

  1. cssText

    cssText 的本质就是设置 HTML 元素的 style 属性值 cssText 的方便之处在于一次可以写很多属性,而且变更 CSS 样式不必变 JS 代码,只需变样式字符串.但它有个缺点,就是它 ...

  2. jdbc URL中的各个参数详解

    常用的有两个,一个是gjt(Giant JavaTree)组织提供的mysql驱动,其JDBC Driver名称(Java类名)为:org.gjt.mm.mysql.Driver 详情请参见网站:ht ...

  3. SQL Server数据库(作业)

    create datebase zuoye2gouse zuoyegocreate table student --学生表( Sno varchar(20) not null primary key, ...

  4. Java多线程-新特性-线程池

    Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定可靠的多线程程序 ...

  5. syslog简介——系统日志写入API

    一.简介 syslog是Linux系统默认的日志守护进程.默认的主配置文件和辅助配置文件分别是/etc/syslog.conf和/etc/sysconfig/syslog文件.通常,syslog 接受 ...

  6. kafka技术要点

    转载:http://blog.csdn.net/caisini_vc/article/details/48007297 Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为 ...

  7. J2EE开发实战基础系列一 HelloWorld【转】

      开始咱们的第一个程序,首先是配置环境,按照上一章所描述的方式下载开发工具,然后配置Java环境变量,给大家看下具体的结构: 环境变量配置OK的提示,如上图. Eclipse和Tomcat的文件目录 ...

  8. Octopus系列之接下来的任务

    更新默认国家[已实现] 更新每页显示条数的后台控制[已实现] 更新国家和区域的Ajax的关联[已实现] 更新详情页面的 属性选择 脚本提示[已实现 可以做到和兰亭一样的效果了] 增加优惠方案的设置和批 ...

  9. java反射之Constructor简单应用

    Constructor类是java反射中重要的类,它是对类中构造器的描述的类.类似于Method(对类中方法的描述的类),Field(对类中属性的描述的类). 通过创建Constructor的对象实例 ...

  10. FloatingActionButton增强版,一个按钮跳出多个按钮--第三方开源--FloatingActionButton

      FloatingActionButton项目在github上的主页:https://github.com/futuresimple/android-floating-action-button F ...