之前的博客实现了最基础的分形树,在这个基础上略微调整一些参数可以得到很多有趣的由分形树发展出的图案。

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);
}
}

我们可以调整分形树的夹角,这个参数在递归调用drawShape方法时修改,当我们将此夹角设置为90度时,可以得到如下图案

当此夹角设为60度时,图案如下:

当此夹角设为10度时,图案如下:

调整偏转角度,并且增加一个树杈,并且修改两个节点之间的距离等参数后生成的分形树如图,这里增加一个drawShape方法,这个方法中增加一个参数用来表示两个节点之间的高度

private void drawShape(Graphics g, double x1, double y1, double angle, double depth, double height) {
if (depth == 0) {
} else
double x2 = x1 + Math.cos(Math.toRadians(angle)) * depth * height;
double y2 = y1 + Math.sin(Math.toRadians(angle)) * depth * height;
double x3 = x1 + Math.cos(Math.toRadians(angle)) * depth * 2 * height;
double y3 = y1 + Math.sin(Math.toRadians(angle)) * depth * 2 * height;
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setStroke(new BasicStroke((float) (0.2f * height)));
g.drawLine((int)x1, (int)y1, (int)x2, (int)y2);
g.drawLine((int)x2, (int)y2, (int)x3, (int)y3); drawShape(g, x2, y2, angle - 15, depth - 1, 0.6 * height);
drawShape(g, x2, y2, angle + 15, depth - 1, 0.7 * height);
drawShape(g, x3, y3, angle - 15, depth - 1, 0.6 * height);
drawShape(g, x3, y3, angle + 15, depth - 1, 0.8 * height);
}
}

Fractal Tree扩展的更多相关文章

  1. Expression Tree 扩展MVC中的 HtmlHelper 和 UrlHelper

    表达式树是LINQ To everything 的基础,同时各种类库的Fluent API也 大量使用了Expression Tree.还记得我在不懂expression tree时,各种眼花缭乱的A ...

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

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

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

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

  4. easyui tree扩展tree方法获取目标节点的一级子节点

    Easyui tree扩展tree方法获取目标节点的一级子节点 /* 只返回目标节点的第一级子节点,具体的用法和getChildren方法是一样的 */ $.extend($.fn.tree.meth ...

  5. EasyUI tree扩展获取实心节点

    <script type="text/javascript"> //扩展 获得tree 的实心节点 $(function(){ $.extend($.fn.tree.m ...

  6. Extjs5 tree扩展----treepanel树组件

       Ext.define('MyExtend.lib.TreeFilter', {         filterByText: function(text) {             this.f ...

  7. HDU 2815 Mod Tree (扩展 Baby Step Giant Step )

    Mod Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  8. SLT学习——leafes tree扩展 【文艺平衡树】

    这是一个全新的数据结构 md,别看这篇文章了,这篇已经废了. 百折不饶,再交一次,更新复杂度证明 这里是HYF,蒟蒻一只,最近因某些原因开始学数据结构了,然后就写了这篇题解. 下面给大家介绍一个全新的 ...

  9. Fractal Tree

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

随机推荐

  1. 重装系统(win7)

    -_-|| 第一次装,可谓艰难险阻 一:准备 1.U盘(大小至少4G)——本人用了4G的 2.查询自己的电脑进入BIOS的方法——本人电脑机型为华硕X550VC,开机长按F2(当时为保险起见,也同时按 ...

  2. 使用Node.js实现数据推送

    业务场景:后端更新数据推送到客户端(Java部分使用Tomcat服务器). 后端推送数据的解决方案有很多,比如轮询.Comet.WebSocket. 1. 轮询对于后端来说开发成本最低,就是按照传统的 ...

  3. Introduction to Windows 8: The Definitive Guide for Developer

    <Windows 8应用开发权威指南>介绍 Introduction to Windows 8: The Definitive Guide for Developer 一.封面设计要求及文 ...

  4. [转]Perfmon - Windows 自带系统监测工具

    以下内容转自:http://blog.csdn.net/oscar999/article/details/7918385 ---------------------------分割线--------- ...

  5. input 中的enabled与disabled属性

    <style type="text/css"> *{ padding:; margin:; list-style-type: none; box-sizing:bord ...

  6. 表单form的属性,单行文本框、密码框、单选多选按钮

    基础表单结构: <body> <h1> <hr /> <form action="" name="myFrom" en ...

  7. 监听TelephonyManager的通话状态来监听手机的所有的来电

    import java.io.FileNotFoundException;import java.io.OutputStream;import java.io.PrintStream;import j ...

  8. 浏览器渲染原理--reflow

    Web页面运行在各种各样的浏览器当中,浏览器载入.渲染页面的速度直接影响着用户体验简单地说,页面渲染就是浏览器将html代码根据CSS定义的规则显示在浏览器窗口中的这个过程.先来大致了解一下浏览器都是 ...

  9. js基础之ajax

    必须搞懂的几个问题: 1.如何创建ajax对象? 2.如何连接服务器? 3.如何发送请求? 4.监控请求状态的事件是什么?分几个阶段?如何获取返回值? 答:onreadystatechange事件:一 ...

  10. C语言中 scanf 和 printf 的小要点

    1 scanf_s需指定%c 个数 h short l long关键字 * 不赋给任何值 W 指定读入宽度 转换字符 a 读浮点值(c99) A 读浮点值(c99) c 读单字符 d 读十进制数 i ...