python生成树形图_使用Python生成树形图案 | 学步园

先看一下效果,见下图。

上面这颗大树是使用Python + Tkinter绘制的,主要原理为使用分形画树干、树枝,最终叶节点上画上绿色圆圈代表树叶。当然,为了看起来更真实,绘制过程中也加入了一些随机变化,比如树枝会稍微有些扭曲而不是一条直线,分叉的角度、长短等都会随机地作一些偏移等。

以下是完整源代码:

# -*- coding: utf-8 -*-

import Tkinter

import sys, random, math

class Point(object):

def __init__(self, x, y):

self.x = x

self.y = y

def __str__(self):

return ": (%f, %f)" % (self.x, self.y)

class Branch(object):

def __init__(self, bottom, top, branches, level = 0):

self.bottom = bottom

self.top = top

self.level = level

self.branches = branches

self.children = []

def __str__(self):

s = "Top: %s, Bottom: %s, Children Count: %d" % /

(self.top, self.bottom, len(self.children))

return s

def nextGen(self, n = -1, rnd = 1):

if n <= 0: n = self.branches

if rnd == 1:

n = random.randint(n / 2, n * 2)

if n <= 0: n = 1

dx = self.top.x - self.bottom.x

dy = self.top.y - self.bottom.y

r = 0.20 + random.random() * 0.2

if self.top.x == self.bottom.x:

# 如果是一条竖线

x = self.top.x

y = dy * r + self.bottom.y

elif self.top.y == self.bottom.y:

# 如果是一条横线

x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值