问题标签 [l-systems]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
942 浏览

python - L-Systems 和 Maya 中的堆栈

因此,我了解 L 系统的规则,并设法创建了谢尔宾斯基三角形。我现在开始制作不同风格的树。

其基本规则是:

我正在使用 Maya 来执行此操作,但我不确定如何推送和弹出堆栈。我知道如何使用列表创建基本堆栈,因为 Maya 没有默认堆栈,但我究竟会推送/弹出什么?

我似乎无法推动物体的世界矩阵。而且,如果不先创建对象就无法做某事,L-System 流程就会出错。作为一个基本示例:

...由于未创建要推动/旋转的对象而无法工作。

任何提示都会非常有用,因为这一直困扰着我一段时间。

0 投票
1 回答
275 浏览

recursion - 用 L 系统创建谢尔宾斯基金字塔

L-Systems的Wikipedia 页面描述了其中的许多,包括一些趋向于谢尔宾斯基三角形的规则。那个特殊的分形也有一个 3D 版本,它基本上使用金字塔而不是三角形。有没有办法通过 L 系统达到这个目标?同一个维基百科页面提到了 3D L 系统的存在,但没有解释它们是如何工作的,也没有给出任何关于它们的规则是什么样子的例子。

首先,3D L 系统与 2D 对应物有何不同(如果存在重大差异),其次,它们可以用来创建这个谢尔宾斯基金字塔吗?

我正在尝试在 Processing 中创建它,因为我之前设法在这个软件中使用 L 系统绘制了 2D 版本。制作 3D L 系统的示例将不胜感激,但不是必需的

0 投票
0 回答
41 浏览

neural-network - L-System输出的神经网络训练?

我正在尝试训练 L 系统输出的鉴别器。它们具有像“F[/F]FF”这样的字符串形式,符号词汇量有限(9 个符号 F0[]tTpP/)

我有一堆输出/布尔对作为数据(l 系统输出字符串,无论这个字符串是否“正确”)。

我想知道我的输入层需要多少个神经元?每个字符串的长度都是可变的,那么输入层也应该缩放吗?

如果您有任何线索,将不胜感激。

谢谢

0 投票
1 回答
3071 浏览

python - python中的简单L系统

您好,我正在寻找一种在 python 中将简单的 L 系统实现为函数的方法,该函数将采用三个参数:公理、规则和交互次数(如果迭代 = 0 输出将是先前输入公理)。我想出了一些代码,它只适用于 1 次迭代,我不知道如何实现更多。

我想出的代码:

0 投票
2 回答
286 浏览

procedural-generation - 具有杂色的现实程序叶生成资源

我知道有很多关于植物等的程序生成的材料,特别是使用 L 系统等。

但是经过快速研究,我一直无法找到任何关于叶子结构的好的/深入的材料。具体来说,虽然我找到了几篇关于叶子形状的文章,但没有找到关于variegation的文章。

是否有关于叶子杂色的真实生成的任何好的/深入的资源?

我希望能够生成如下图所示的叶子:

在此处输入图像描述

(我知道这个问题可能会突破一个好的 Stackoverflow 问题的界限,但它在某种意义上是特定的,即要求特定类型的资源(叶子中的杂色)。)

0 投票
2 回答
314 浏览

java - 如何仅按需制作 Java GUI 绘制?

我的应用程序旨在使用 L-Systems 绘制一棵树。我从一个公理开始,为下一代应该替换什么提供一个规则。我将 JFrame/JPanel 组合用于一个按钮(将来可能会更多)/JComponent 用于绘图区域。我编写了一个小乌龟图形方法(前进、右转、左转、推动当前变换、弹出变换)。每次单击“生成”按钮时,我都会调用 repaint(),然后再调用 turtleDraw()。

我遇到的第一个问题是,当我运行应用程序时,又调用了 paintComponent()(我认为)的 paint() 已经被调用了两次。这已经很烦人了。我将 setResizable() 设置为 false,因为这会重新绘制窗口。有没有办法解决这个问题,只有当我点击“生成”时才画线?根据我的发现,当应用程序“需要这样做”时,没有实际的方法可以阻止 paint() 被调用,所以也许还有另一种方法来调整代码。

0 投票
1 回答
64 浏览

javascript - 我可以使用正则表达式捕获组来防止该组的连续匹配吗?

我写了一个基于正则表达式的 Javascript 解释器。是否可以使用捕获组来防止连续匹配评估任何先前捕获的匹配。

示例:我从一个字符串开始X。这里有两个替换规则:

X: 'F-[[X]+X]+F[+FX]-X'

F: 'FF'

通过 0: X被替换为F-[[X]+X]+F[+FX]-X. 由于F不在初始字符串中,因此将被忽略。

pass 1:这里是我想使用捕获组策略的地方。我首先更换了 4 Xs。现在,我如何忽略这些匹配项 - 大概使用捕获组 - 并且只评估字符串的其余部分?

0 投票
0 回答
380 浏览

modeling - 中国古典政治秩序愿景的程序建模

我目前正在处理的问题涉及《管子》中描述的系统。这本书的很大一部分是关于政府应该如何从经济中提取盈余,他们可以重新分配这些盈余,以确保现有追随者的忠诚度并获得新的追随者。在这种制度下,谁能够重新分配最多的财富,谁就成为了整体的领导者。然而,他还必须在竞争中胜过系统中的其他人:他们都忙于建立自己的再分配网络。

结果是一系列金字塔形的再分配网络,既独立又嵌套。

预期结果的简化视觉表示

这些是跨越时间和空间的动态的。获得资源可以让您获得更多关注者,这反过来又可以让您访问更多资源。还有一个随机因素:收成不好或战争可能会耗尽你的资源。如果一位领导者耗尽了资源(无论是由于灾难还是因为他在追随者之间过于慷慨地重新分配资源),他要么被追随者取代,要么他的网络将崩溃,其成员离开加入其他网络。

我认为可以通过算法对此进行建模。

我们可以假设共享资源的意愿是与生俱来的。

慷慨=倾向得分

个人获得追随者是他拥有的剩余资源和分享这些资源的意愿的函数。

追随者[tn] = 剩余[t-1] * 慷慨

值得注意的是,在这个模型中增长是内生的。它是在给定技术和自然资源 (a) 的情况下被视为现实的任何经济增长系数的产物,以及前一个周期的盈余和个人拥有的追随者数量的产物,基于这些构成生产要素。(注意:我对从中获得实际货币价值不感兴趣,只是对关系进行建模。我知道如果你将真实数字插入其中,人们最终会重新分配比他们拥有的更多的东西。)

增长 = a (剩余[t-1] * 追随者[t-1])

在 T=0 时,系统中每个人享有的盈余必须是随机产生的。

剩余[t0] = 随机生成的数字

追随者为他们的领导者创造了额外的资源,但他们也需要得到报酬,这意味着他们同时消耗了领导者的资源,这与他的慷慨倾向得分成正比。如上所述,还必须包括一个随机分量,以解释饥荒、丰收、战争等。

剩余[tn] = 随机分量(剩余[t-1] + 增长)-(追随者[t-1] * 慷慨)

一旦定义了这些关系,那么算法就相对简单了:

T1: 每个人检查最近没有关注他的人的剩余*慷慨分数。如果个人 A 的 SG > 个人 B 的 SG,则个人 B 靠近个人 A 并成为他的追随者。(注意:如果个人B有自己的追随者,他会随身携带。另外:追随者会在每一轮中自动重新检查他们的领导者的SG,因为他是最接近他们的个人。他们将离开他的网络成为自由球员如果他的 SG 低于他们的 SG 再一次。)

否则,他什么都不做。

T2: 每个人的统计数据(追随者,盈余)根据新情况重新计算。重复步骤 1。

T3: 重复上一步

人们会期望具有最佳慷慨得分的个人建立最大的网络,因为他们在不完全耗尽资源的情况下获得追随者。

我怀疑(但不确定)该模型的特征与 L 系统模型的特征相似。

  • 个人被编程为一个简单的指令:“如果离你最近的人的 S*G 分数比你高,请接近并跟随他。”</li>
  • 在此基础上,个体形成结构(从具有最佳 S*G 分数的个体的角度来看,它们似乎以半结构化的方式聚集在他周围)
  • 这些结构随着每个连续的时间段而增长
  • 他们在耗尽自己的资源或随机灾难发生后崩溃。
  • 崩溃后,该过程会自动重新开始。

但是,我不是数学或计算机专家(我是中国哲学专家),所以我不确定我是否只是被表面的相似性所愚弄。这是字符串重写的真实例子,还是我只是在说服自己这是因为你从中得到了树状结构?这甚至是一个可以工作的模型吗?我完全搞砸了我的方程式吗?(我从高中起就没有这样做过,所以很有可能。)

我们感激地接受所有帮助。

0 投票
1 回答
689 浏览

python - 使用python实现参数L系统

我一直在用 python 实现参数 L 系统。我的案例是一棵二维树,因此我使用的是 python turtle 库。我为一个非参数 L 系统编写了这个简单的代码,它工作得很好。这是我的代码:

问题是这段代码适用于一个简单的非参数 L 系统,但我想在每一步中减小树的直径和长度。我为此编写了两个函数,length_functionwidth_function我不知道在哪里或如何使用它。这是我的 L 系统规则和公理:

的值r1, r2, q, e是已知的。也是s0 & w0众所周知的。我不想以字符串格式存储这些参数的值,我希望它们在列表或数组中,但我不知道如何。这是我正在尝试绘制的树与我的代码绘制的图片: 参数树 在此处输入图像描述

0 投票
1 回答
55 浏览

java - 为什么输出错误

我应该得到一棵树。但我没有得到一棵树。我得到了一个很长的东西,而不是一棵树。

这是我的代码:

主.java

TreeDrawer.java

我做错了什么。我不知道如何发布我得到的输出的屏幕截图,但它看起来完全不正确。我知道我的 L 系统算法是正确的,因为它运行良好。但是我认为当我尝试保存和恢复转换状态时,出现了问题。保存转换状态是括号([和]。'['保存,']'从该保存恢复)。但我不知道出了什么问题。我需要帮助找出问题所在。谢谢你。