编程模拟自然(三):更好的静态树算法

  旧言月中有桂,有蟾蜍,故异书言,月桂高五百丈,下有一人常斫之,树创随合。 

  “汪...”一声猿啸从天际传来。

  吴刚抬头看了看天,却没有发现什么,只当是出现了幻听。



第零章 提出问题

  元来到这个世界已经好多天了,本想去找那树下的人探听一些消息,却不想竟然无法进入桂树百丈范围。

  元在伊甸园里种过树的,但看到那桂树受创随即便愈合,倍感神奇。看来需要更新算法了。

  “这颗树的全称为Graphics User Interface Tree,中文简称:桂树。”



第一章 作出假设

  每个树枝都是一个独立的结点,它可以向上再生长n个树枝结点。

  “嗯,一定是这样的。”元不忘科学的探究方法需要自我肯定。

  “这颗树的结点分支比较少。”



第二章 制定计划

  1.首先,长出第一个树枝(树干)

  2.然后,每个树枝的顶部长出不少于一个树枝,每个树枝的粗为上一层0.618倍,长度为上一层的0.618*random(1)倍

  3.最终,重复第二步,直至树枝不能更细(粗度小于1的时候,或者递归算法达到一定层数)

  “计划里可没让树长花儿。”



第三章 实践检验

  把树画出来就知道结果了,每个树枝的顶部用一个向量表示,生长出的子树枝旋转一定角度并改变模长即可。

Imports System.Numerics
‘‘‘ <summary>
‘‘‘ 表示一颗树的树枝结点
‘‘‘ </summary>
Public Class TreeNode
    Public Property Location As Vector2 ‘树枝结点的顶部向量
    Public Property RealLoc As Vector2 ‘树枝结点的真实位置,即屏幕显示的位置
    Public Property Length As Single ‘树枝的长度
    Public Property Rank As Integer ‘树枝结点的层数
    Public ChildNode As New List(Of TreeNode) ‘子树泛型List
    Public Property HasFlower As Boolean ‘是否有花朵
    Public Property FlowerSize As Single ‘花朵的大小
    Public Property MidRotateAngle As Single ‘中折角度
    Public LineShape As New List(Of Vector2) ‘中折向量
    ‘‘‘ <summary>
    ‘‘‘ 初始化树枝结点
    ‘‘‘ </summary>
    ‘‘‘ <param name="Loc">树枝结点的顶部向量</param>
    ‘‘‘ <param name="Len">树枝的长度</param>
    ‘‘‘ <param name="Rk">树枝结点的层数</param>
    Public Sub New(Loc As Vector2, Len As Single, Rk As Integer)
        Location = Loc
        Location.SetMag(Len) ‘重新设定模长
        Length = Len
        Rank = Rk
    End Sub
End Class

  “永远看着像伪代码。”



第四章 得出结论

  树长成了,元还得撰写一篇探究实验报告。

  “这片天地与我创造的世界确实不一样,竟然长成这副样子。”元有些郁闷。

  “小兔崽子,你给我站住,可怜了我辛苦种的水墨树。”

  “斧王,砍了就跑!”不远处传来还显得稚嫩的童声。



后记

  “哼哼,终于逮住你了。”

  ...

  “我问你话,你可要老实回答。”

  “FirstName,SecondName?今年几岁?”

  “我只有乳名‘无名儿’,已是总角之龄。”

  “星座?”

  “属猴。”

  ...

  “你爸是谁?”

  “爹爹是大英雄,不过我却从来没见过。”

  “那你妈呢?”

  “哼,我娘可是广寒宫中的仙子,你休得欺负我。”

预知前情,请看上回分解

时间: 2024-10-27 12:30:00

编程模拟自然(三):更好的静态树算法的相关文章

【目录导航】编程模拟自然系列博文

简介 博文名称:编程模拟自然 系列别称:奇幻元纪 主要角色:元.无名儿 角色设定:(按出场顺序) 元:故事主角,拥有创世能力的程序猿 亚和夏:生活在元创造的世界里的人类 NvWa:传说通过重构天阙代码完成补天的程序Yuan 盘古:上古程序架构师,后世传有生平语录<盘语>一书 吴刚:在月亮上中终日砍伐桂树的码农 无名儿:故事主角,一破小孩儿 嫦娥:奔月的仙子,身居广寒宫 天狗:妖物,来源不明 望舒:御车之神,管辖月宫禁地 VisualSnake:伊甸园里的可视化集成开发环境,外形同蛇 后羿:(下

编程模拟自然(一):如何画一颗静态树

序 万物初始之前,宇宙是无边无际混沌的黑暗,只有元之灵穿行其间.元对这无边的黑暗十分不满,就轻轻一敲键盘,说:“要有光”,于是世间就有了光.元称“光”为“昼”,称“黑暗”为“夜”.亮光隐去,黑暗重临,从此,世间就有了昼与夜的交替.这是元创世的第一天. 这个二次元世界诞生之初伴有一只程序猿,Ta的名字叫元. 第一章 二叉树必须是最好的树! 元就是这样想的,为了表达对这种数据结构的崇拜之情,决定在这个世界造出一颗真实的树,一开始的构想是这样的 “正所谓树极生三干,三干生六枝,六枝生十二叶.” 然而这

编程模拟自然(九):元胞自动机

序 旧书有云:发鸠之山,其上多柘木.有鸟焉,其状如乌,文首.白喙.赤足,名曰精卫,其鸣自詨. 一日,精卫游于码海,溺而不返,后常衔西山之木石,以堙于海.有诗为证: 万事有不平,尔何空自苦: 长将一寸身,衔木到终古? 我愿平码海,身沉心不改: 码海无平期,我心无绝时. 呜呼!君不见,西山衔木众鸟多,鹊来燕去自成窠! (前情提要:主角元乘坐返回舱降落到了码海上,随后遇到了个鸟人...) “咳咳,远道的客人,我名精卫XIV,乃是先祖精卫鸟的第十四代后裔...”鸟人作自我介绍 “...你是谁,从哪里来又

编程模拟自然(七):力学矢量与牛顿定律

序 旧书有云:古者十日并出,草木焦槁,一曰后羿者射日,太阳里之九鸟皆死,救苍生于涂炭. 传闻后羿所用箭矢加持了力学模拟系统,可实现深空精确制导,才得以击落太阳. ... “星星挂在天边,就像梦想遥不可现...”元哼唧着. “猿叔你在哼什么曲子啊?” “...星星消失在天边,就像诺言来不及实现...”元对无名儿捂着双耳选择无视. “咳咳,我这是在朗诵诗人小刚的诗歌呢!” ... 第零章 “星星挂在天...你爸曾经射落过太阳?”元刚要继续深情朗诵,似乎想到了什么. “是的,听娘说爹地最厉害了.” “

编程模拟自然(八):几种常见力的建模

序 古书记载:大河之东,有美丽佳人,乃天帝之子,机杼女工,年年劳役,织成云雾绢缣之衣,天帝怜其独处,嫁与河西牵牛为妻. 自此即废织紝之功,留恋不归.天帝大怒,责归河东,令他们每年只有七月七日可以相会一次.有诗云: 纤云弄巧,飞星传恨,银汉迢迢暗渡. 金风玉露一相逢,便胜却人间无数. 柔情似水,佳期如梦,忍顾鹊桥归路. 两情若是长久时,又岂在朝朝暮暮 第零章 实例化一个长整型 “无名儿,来个睡前故事吧.” “猿叔,我才是小孩子唉!” “你当然是小屁孩,我这是培养你的语言表达能力.” “哦,那给你讲

C#编程总结(三)线程同步

C#编程总结(三)线程同步 在应用程序中使用多个线程的一个好处是每个线程都可以异步执行.对于 Windows 应用程序,耗时的任务可以在后台执行,而使应用程序窗口和控件保持响应.对于服务器应用程序,多线程处理提供了用不同线程处理每个传入请求的能力.否则,在完全满足前一个请求之前,将无法处理每个新请求.然而,线程的异步特性意味着必须协调对资源(如文件句柄.网络连接和内存)的访问.否则,两个或更多的线程可能在同一时间访问相同的资源,而每个线程都不知道其他线程的操作. "如果觉得有用,请帮顶! 如果有

[C# 网络编程系列]专题三:自定义Web服务器

转自:http://www.cnblogs.com/zhili/archive/2012/08/23/2652460.html 前言: 经过前面的专题中对网络层协议和HTTP协议的简单介绍相信大家对网络中的协议有了大致的了解的, 本专题将针对HTTP协议定义一个Web服务器,我们平常浏览网页通过在浏览器中输入一个网址就可以看到我们想要的网页,这个过程中浏览器只是一个客户端,浏览器(应用层应用程序)通过HTTP协议把用户请求发送到服务端, 服务器接受到发送来的HTTP请求,然后对请求进行处理和响应

ActionScript3游戏中的图像编程(连载三十九)

2.3.1 用方块观察斜面样式与斜角滤镜作用方法的差异 在Photoshop和Flash里都各自建一个500*500的空白文件,然后各自在画布中心画上一个纯蓝的(#0000FF),100*100大小的方块,(如果不懂得如何完成以上操作,可自行翻阅相关的入门教材)然后Flash里再多做一步,按F8转换为元件,类型选择"影片剪辑". 为了最大程度上减少对本课题研究的干扰,我们创建的投影力求做到最简单,最干净.为此,我把Flash里的投影滤镜中的模糊设置成0,并且把颜色调亮(#00cc00)

[原创]ActionScript3游戏中的图像编程(连载三十五)

2.2.8 Photoshop品质初探——杂色 重新回到Photoshop的品质选项,首先,杂色一项似乎更容易理解,我们尝试拖到30%,可以看到投影上多了一些杂点(图 2.29).数值越大,杂色越多,很适合用来模拟锈迹或者羊皮纸等粗糙的表面. 图 2.29 设置30%的杂色 杂色上方的等高线可谓Photoshop图层样式最最精华之处了,下面我们就来探讨一下. 现在先把杂点一项重置为0. [原创]ActionScript3游戏中的图像编程(连载三十五)