Tree


在 P5.js 中绘制一棵树。

绘制树的过程与数据结构中树的遍历过程相似,都是从根开始,递归地调用遍历方法。

在这个例子中,为了使树的外观具有一定的随机性,我们不固定树的层数,而是约定树枝(branch)的最小长度。当某一次递归时,树枝的长度小于或等于最小长度,我们就停止递归,并通过vertex()方法来绘制叶子。

在绘制树枝时,每次调用都递归地绘制左右子树。绘制左右子树前,将绘制的方向旋转一个随机角度,并将下一次递归绘制树枝的长度设置为此次长度的 0.7 到 0.9 倍,从而产生不对称的树。

const branch = (length: number) => {
  if (length > MIN_BRANCH_LENGTH) {
    p.line(0, 0, 0, -length)
    p.translate(0, -length)
    // 右子树
    p.rotate(p.random(20, 30))
    branch(length * p.random(0.7, 0.9))
    // 左子树
    p.rotate(p.random(-50, -60))
    branch(length * p.random(0.7, 0.9))
  } else {
    // 叶子
    leave()
  }
}

按下 R 键可以重新绘制一棵树。