R语言绘制Barnsley蕨类分形:茎部缺失问题求助及代码排查
Barnsley蕨的茎部是由概率最高(通常85%)的第一个仿射变换生成的,你遇到茎部缺失的情况,大概率是这个核心环节出了问题,我整理了几个最常见的错误点,你可以对照自己的代码逐一排查:
第一个仿射变换的参数写错了
茎部的变换是整个蕨类的“骨架”,正确的参数应该是这样的:# 茎部变换(85%概率触发) x_new <- 0.85 * x_current + 0.04 * y_current y_new <- -0.04 * x_current + 0.85 * y_current + 1.6如果你把
y_new里的+1.6漏掉、改成别的数值,或者变换矩阵的系数(比如0.85、0.04)写错,都会直接导致茎部的点无法正确生成。概率分配错误
茎部变换需要占据最高的概率权重(85%),剩下的15%分给另外三个变换(分别是7%、7%、1%)。如果你给茎部变换的概率设置得太低(比如不小心写成了5%),那生成的茎部点会少到几乎看不见。
你可以检查一下自己代码里的概率向量,比如正确的分配应该是prob <- c(0.85, 0.07, 0.07, 0.01)。初始点选择不合理
通常我们会从(0, 0)开始迭代,如果你的初始点设得偏离蕨类的生成区域(比如设成了(100, 100)),前几十次迭代可能都在生成远离茎部的点,甚至后续迭代也无法回到茎部区域。迭代次数太少
茎部需要大量的点才能显现出来,至少要迭代10000次以上,如果你只迭代了几百次,可能只有叶子部分的点足够,茎部的点还没积累到能被看到的数量。绘图时的点样式掩盖了茎部
比如你设置了过大的点尺寸,或者把茎部的点和叶子的点用了同样的深色,导致茎部被密集的叶子点覆盖。可以试试把点设小一点(比如pch = "."),或者给茎部点单独设置颜色。
你可以先重点检查前两个问题——变换参数和概率分配,这是最容易出错的地方,也是影响茎部生成的核心因素。
内容的提问来源于stack exchange,提问作者anilewe

