Python画一棵茂盛的分形树
创始人
2024-04-25 22:18:01
0

文章目录

    • 前情回顾
    • 添加分岔
    • 茂盛的分形树

前情回顾

上次画了一棵分形树:用Python画一棵分形树,得到的图如下

在这里插入图片描述

发现看的人还是挺多的,但没什么人点赞,这说明我能给大家画分形树,大家很高兴,但这棵树太秃了,大家不喜欢。

分形树,就是用分形的逻辑去画一棵树,所谓分形,若从编程的角度去理解,其实就是简单规则的反复迭代。

例如,现在有一条线段,长为LLL,在这个线段的端点处再画两个线段,每个线段的长度为23L\frac23L32​L,与前一个线段的夹角为±10°\pm 10°±10°,将这个规则不断进行下去,直到线段长度小于δ\deltaδ。

添加分岔

如想让分形树变得茂盛,第一步就是让树枝多一些分岔点,如果仍旧以线段为骨架,那么树枝将不在端点分岔,而在某个位置分岔。

不过无论如何变化,作为骨架的线段类是不会变的,变的是分岔方法,即getChild

import numpy as np
rand = lambda r : 1 + r*(np.random.rand()-0.5)class segment:def __init__(self, st, th, L):self.st = np.array(st)self.th = thself.L = Lself.setEd()def setEd(self):x, y = self.stth = np.deg2rad(self.th)dx = self.L*np.cos(th)dy = self.L*np.sin(th)self.ed = np.array([x+dx, y+dy])def getAxis(self):xs = (self.st[0], self.ed[0])ys = (self.st[1], self.ed[1])return (xs, ys)# dL表示树枝生长的位置def getChild(self, dTh, L, dL):st = (1-dL)*self.st + dL*self.edreturn segment(st, self.th+dTh, L)

接下来更改分形逻辑,由于这次的getChild一次只产生一个子线段,所以在分形逻辑中,需要将生成子线段的个数也考虑进去。

def fractal(L, minL, dL, st=0.7, dTh=15, th0=90, rL=0.1, rTh=0.1):segs = [[segment((0,0), th0, L)]]while L > minL:L *= dLsegs.append([])for seg in segs[-2]:segs[-1].append(seg.getChild(dTh*rand(rTh), L*rand(rL), st))segs[-1].append(seg.getChild(-dTh*rand(rTh), L*rand(rL), st))return segs

然后写测试和绘图代码

from itertools import chain
import matplotlib.pyplot as plt
segs = fractal(10, 1, 0.7, 0.7, 15, 90, rL=1, rTh=1)def drawSegs(segs):segs = list(chain(*segs))pts = np.array([s.ed for s in segs])for seg in segs:xs, ys = seg.getAxis()test = plt.plot(xs, ys, color='g', zorder=1)xs, ys = pts.TN = len(xs)colors = np.random.rand(N)areas = (np.random.rand(N)*30)**2plt.scatter(xs, ys, s=areas, c=colors, marker='*', alpha=0.8, zorder=2)plt.axis("off")plt.show()

得到如图所示,发现,从观感上来说,貌似比之前更秃了

在这里插入图片描述

茂盛的分形树

为了摆脱这种尴尬的局面,第一步就是在树干的正前方添加一根树枝,即在fractal中的for循环里,添加一个

segs[-1].append(seg.getChild(0, L*rand(rL), 0.7))

然后再生成,绘图

segs = fractal(10, 1, 0.7, 0.7, 15, 90, rL=1, rTh=1)
drawSegs(segs)

最后得到的树如下图所示,枝繁叶茂了许多

在这里插入图片描述

相关内容

热门资讯

安卓系统源码怎么打开,并可能需... 你有没有想过,安卓系统的源码就像是一扇神秘的门,隐藏着无数的技术秘密?想要打开这扇门,你得掌握一些小...
安卓8.0系统体验视频,智能革... 你有没有听说安卓8.0系统最近可是火得一塌糊涂啊!作为一个紧跟科技潮流的数码达人,我当然要来给你好好...
宣传系统漫画app安卓,探索安... 亲爱的读者们,你是否曾在某个午后,百无聊赖地打开手机,想要寻找一些轻松愉悦的读物?今天,我要给你介绍...
鸿蒙替换安卓系统吗,开启智能生... 你知道吗?最近科技圈里可是炸开了锅,因为华为的新操作系统鸿蒙系统,据说要大举进军手机市场,替换掉安卓...
手机安卓系统深度清理,解锁手机... 手机里的东西是不是越来越多,感觉就像一个装满了杂物的储物柜?别急,今天就来教你一招——手机安卓系统深...
安卓上的windows系统,融... 你有没有想过,在安卓手机上也能体验到Windows系统的魅力呢?没错,这就是今天我要跟你分享的神奇故...
安卓系统焦点变化事件,Andr... 你知道吗?在安卓系统的世界里,最近发生了一件超级有趣的事情——焦点变化事件。这可不是什么小打小闹,它...
一加系统安卓降级,轻松还原经典... 你有没有想过,你的手机系统升级后,突然发现某些功能变得不那么顺心了?别急,今天就来聊聊一加系统安卓降...
日本最好的安卓系统,体验非凡 亲爱的读者们,你是否曾想过,在遥远的东方,有一个国家,他们的智能手机系统独具特色,让人眼前一亮?没错...
荣耀安卓11 系统证书,保障安... 你知道吗?最近手机圈里可是炸开了锅,荣耀安卓11系统证书成了大家热议的话题。这不,我就迫不及待地来和...
安卓手机开机升级系统,体验流畅... 你有没有发现,每次你的安卓手机开机,总会有那么一刹那,屏幕上跳出一个升级系统的提示?是不是觉得这就像...
真正的安卓系统手机,安卓系统手... 你有没有想过,为什么有些人对安卓系统手机情有独钟?是不是觉得市面上的安卓手机千篇一律,缺乏个性?别急...
安卓怎么用定位系统,轻松实现精... 你有没有想过,手机里的定位系统竟然这么神奇?它不仅能帮你找到回家的路,还能在茫茫人海中找到你的好友。...
安卓的哪个系统流畅,探索新一代... 你有没有想过,为什么你的安卓手机有时候像蜗牛一样慢吞吞的,而别人的手机却像风一样快?今天,就让我带你...
安卓系统解锁工具下载,畅享自由 你是不是也和我一样,对安卓系统的解锁工具感兴趣呢?想象你的手机被锁住了,无论是忘记密码还是想尝试新的...
谷歌退出安卓系统停用,停用背后... 你知道吗?最近有个大新闻在科技圈里炸开了锅!谷歌竟然宣布要退出安卓系统,这可真是让人大跌眼镜啊!想象...
安卓系统卡顿修复,轻松提升手机... 手机用久了是不是感觉有点卡卡的呢?别急,今天就来给你支几招,让你的安卓手机重焕生机,告别卡顿的烦恼!...
安卓系统停用怎么解除,轻松恢复... 你是不是也遇到了安卓系统停用的问题,急得像热锅上的蚂蚁?别急,今天就来给你详细解析怎么解除这个让人头...
最初始的安卓系统,技术演进与产... 亲爱的读者,你是否曾好奇过,那个如今无处不在的安卓系统,它的诞生之初是怎样的呢?今天,就让我们一起穿...
patchwall系统和安卓系... 你有没有发现,手机上的界面越来越个性化了?没错,这就是科技的魅力所在。今天,咱们就来聊聊两个在个性化...