似乎每一个有关分形的教程都要讲到分形树,大概是因为树是生活中最常见的分形实物吧。这一节将展示下如何一步一步地生长出一棵树来。其实现算法不难,就是在每一次生长迭代中,使线段生长出几条新的线段来。

核心代码:

static void FractalTree(const Vector3& vStart, const Vector3& vEnd,
Yreal trunk_angle, Yreal branch_angle, Yreal trunk_c, Yreal branch_c,
Vector3* pVertices)
{
Vector3 vSub = vEnd - vStart;
Yreal len = D3DXVec3Length(&vSub);
Yreal alfa = atan2f(vSub.y, vSub.x); Yreal trunk = len*trunk_c;
Yreal branch = len*branch_c;
Yreal branch2 = branch*1.25f; pVertices[] = vEnd;
//pVertices[1] = pVertices[0] + vSub*trunk_c;
pVertices[].x = pVertices[].x + trunk*cosf(alfa + trunk_angle);
pVertices[].y = pVertices[].y + trunk*sinf(alfa + trunk_angle);
pVertices[].z = 0.0f; pVertices[] = vEnd;
pVertices[].x = pVertices[].x + branch*cosf(alfa + branch_angle);
pVertices[].y = pVertices[].y + branch*sinf(alfa + branch_angle);
pVertices[].z = 0.0f; pVertices[] = pVertices[];
pVertices[].x = pVertices[].x + branch*cosf(alfa - branch_angle);
pVertices[].y = pVertices[].y + branch*sinf(alfa - branch_angle);
pVertices[].z = 0.0f; pVertices[] = vStart + vSub*0.55f;
pVertices[].x = pVertices[].x + branch2*cosf(alfa + branch_angle);
pVertices[].y = pVertices[].y + branch2*sinf(alfa + branch_angle);
pVertices[].z = 0.0f; pVertices[] = pVertices[];
pVertices[].x = pVertices[].x + branch2*cosf(alfa - branch_angle);
pVertices[].y = pVertices[].y + branch2*sinf(alfa - branch_angle);
pVertices[].z = 0.0f;
}

软件截图:

树的生成需要若干个参数:树干的偏角,树枝的偏角,树干的生长长度,树枝的生长长度,修改下参数可以得到如下形状的树:

软件下载地址:http://files.cnblogs.com/WhyEngine/Fractal.7z

分形之树(Tree)的更多相关文章

  1. 树(tree)

    树(tree)[题目描述]从前在森林里面有一棵很大的树,树上住着很多小动物.树上有

  2. JS--插件: 树Tree 开发与实现

    日常在Web项目开发时,经常会碰到树形架构数据的显示,从数据库中获取数据,并且显示成树形.为了方便,我们可以写一个javascript的一个跨浏览器树控件,后续可以重复使用.本节分享一个自己开发的JS ...

  3. 轻量级jquery框架之--树(tree)

    前言 在常用的UI组件中,树形组件与数据列表组件可以说是构成一个管理平台基本的两大数据核心组件.树形组件用于系统菜单,数据列表用于数据表现,两者配合即可完成一个简单的数据系统.要实现一个支持复选.工具 ...

  4. layui实现checkbox的目录树tree

    layui.use([ 'tree' ], function() {$ = layui.jquery;form = layui.form;//获取节点数据getTreeData();}); funct ...

  5. 数据结构(二) 树Tree

    五.树 树的定义   树的逻辑表示:树形表示法.文氏图表示法.凹入表示法.括号表示法.         结点:表示树中的元素,包括数据项及若干指向其子树的分支. 结点的度:结点拥有的子树树:树的度:一 ...

  6. Python与数据结构[3] -> 树/Tree[2] -> AVL 平衡树和树旋转的 Python 实现

    AVL 平衡树和树旋转 目录 AVL平衡二叉树 树旋转 代码实现 1 AVL平衡二叉树 AVL(Adelson-Velskii & Landis)树是一种带有平衡条件的二叉树,一棵AVL树其实 ...

  7. Python与数据结构[3] -> 树/Tree[1] -> 表达式树和查找树的 Python 实现

    表达式树和查找树的 Python 实现 目录 二叉表达式树 二叉查找树 1 二叉表达式树 表达式树是二叉树的一种应用,其树叶是常数或变量,而节点为操作符,构建表达式树的过程与后缀表达式的计算类似,只不 ...

  8. Python与数据结构[3] -> 树/Tree[0] -> 二叉树及遍历二叉树的 Python 实现

    二叉树 / Binary Tree 二叉树是树结构的一种,但二叉树的每一个节点都最多只能有两个子节点. Binary Tree: 00 |_____ | | 00 00 |__ |__ | | | | ...

  9. 如何使用 JSP JSTL 显示/制作树(tree) 菜单

    JSTL里面并没有直接制作tree菜单的元素,因此递归是JSP JSTL显示/制作tree菜单的唯一方法. 以下详述如何制作tree菜单. 首先,在主页面里面增加包含制作树菜单的jsp,例如: 在my ...

随机推荐

  1. P3587 [POI2015]POD

    题目描述 长度为n的一串项链,每颗珠子是k种颜色之一. 第i颗与第i-1,i+1颗珠子相邻,第n颗与第1颗也相邻.切两刀,把项链断成两条链.要求每种颜色的珠子只能出现在其中一条链中.求方案数量(保证至 ...

  2. Python之路(第十二篇)程序解耦、模块介绍\导入\安装、包

    一.程序解耦 解耦总的一句话来说,减少依赖,抽象业务和逻辑,让各个功能实现独立. 直观理解“解耦”,就是我可以替换某个模块,对原来系统的功能不造成影响.是两个东西原来互相影响,现在让他们独立发展:核心 ...

  3. 修改电脑自动休眠时间win10

    https://jingyan.baidu.com/article/adc81513a481cdf723bf73e6.html

  4. Linux学习笔记:系统目录结构

    Linux系统文件夹代表的含义: /bin - Binaries. /boot - Files required for booting. /dev - Device files. /etc - Et ...

  5. springMVC学习二 原始springMVC环境搭建

    第一步:导入jar包 第二步:配置DispatcherServlet DispatcherServlet本质是一个Servlet,在spring-webmvc包中,在servlet2.5之前  spr ...

  6. 为什么要选择OMP之合规性

  7. python 中 __name__ 的使用

    1. 如果模块是被导入,__name__的值为模块名字2. 如果模块是被直接执行,__name__的值为’__main__’   Py1.py #!/usr/bin/env python def te ...

  8. Python10/22--面向对象编程/类与对象/init函数

    类: 语法: class关键字 类名# 类名规范 大写开头 驼峰命名法class SHOldboyStudent: # 描述该类对象的特征 school = "上海Oldboy" ...

  9. linux普通用户使用1024以下的端口(80)

    linux对于非root权限用户不能使用1024以下的端口,对于一些服务,过高的权限,会带来一定的风险.那么对于低权限的用户如何对外开放1024以下的端口.我这里找到几种办法并且亲测可行 首先搭建环境 ...

  10. 2018.10.24 NOIP模拟 小 C 的数组(二分+dp)

    传送门 考试自己yyyyyy的乱搞的没过大样例二分+dp二分+dp二分+dp过了606060把我自己都吓到了! 这么说来乱搞跟被卡常的正解比只少101010分? 那我考场不打其他暴力想正解血亏啊. 正 ...