问题标签 [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 回答
2434 浏览

python - 如何让乌龟记住它在 L 系统中的位置?

我们刚刚开始在 uni 编程。我们的任务之一是在 Python 中使用带有海龟的 L 系统创建分形树。这个:

代码:

如您所见,它很混乱。我想知道如何让乌龟记住它的位置和标题“[”,然后再返回它“]”。

我对此真的很陌生,所以请以清晰易懂的方式回答。

0 投票
1 回答
391 浏览

recursion - 从 L-Systems 生产规则(理论)写(翻译)到 Python 的海龟图形(实践)

问题是我真的不知道如何开始编写代码。我需要一个起点。我确实知道如何将重写产生式规则应用于单个参数,例如科赫曲线。当生产规则的数量超过一个时,问题就出现了,例如:

(谢尔宾斯基垫片)

我的问题是:如何将其集成到 python 乌龟脚本中?你如何告诉 python 以递归方式替换 X 组命令?我尝试创建两个程序,一个用于 X,一个用于 F,但我无法正确处理。在示例中,如何将 X 替换为 (F + X + F) 等其他词?有什么直接的方式来翻译这个吗?

我很抱歉,我迷路了,当我想到递归编程和分形元素时,这对我来说仍然很抽象......

提前致谢!

0 投票
2 回答
257 浏览

graphics - 找到合适的比例来绘制 L 系统的迭代

我制作了一个 OCaml 程序,它使用他的定义、他的命令解释和迭代在图形窗口上绘制给定 l 系统的表示。绘图是使用海龟图形制作的(海龟可以画一条线,移动到给定点并转动给定角度)。

我遇到的问题是所有线条的尺寸都相同(这就是它需要的尺寸),当我绘制 L 系统时,如果我没有给出正确的线条尺寸,绘图就会像你一样离开图形窗口可以在那张照片上看到。

在此处输入图像描述

我知道我可以将绘图移到左侧,但我总是从窗口的中心开始绘图。我需要帮助的是如何为给定的指令序列设置正确的线条大小,例如:我有那个指令列表下图: ACAABAABABACACAACACACACAACAABABACAABAABABACACAACACACACAACAABABACAABAABABACACAACACACACAACAABABACAABAABABACACAACACACACAACAABA。

其中 A 表示:画一条“X”大小的线 B:转 π/2 C:转 -π/2。

我怎样才能找到 X(线的大小)的最佳值,以便使图形保留在图形窗口上。

我发现的唯一解决方案是从给定值(示例 X=20)开始,并尝试使用该值绘制 l 系统,如果它熄灭,然后使用 X/2 再次尝试,直到它工作!

有人有更好的主意吗?

0 投票
4 回答
1676 浏览

c# - 在 C#/WPF 中加速 L-System 渲染器

lsys是一个用 CoffeeScript 编写的超快的 L-System渲染器。

下面是一个简单的 C# 和 WPF 渲染器。呈现此示例是硬编码的。运行时的结果如下:

在此处输入图像描述

在窗口中单击鼠标将调整angleGrowth变量。重新计算GeometryGroup以及构建Canvas通常需要不到十分之一秒。但是,实际的屏幕更新似乎需要更长的时间。

关于如何使其更快或更高效的任何建议?它目前比 CoffeeScript/JavaScript 版本慢得多... :-)

0 投票
1 回答
570 浏览

python - Python Order 10 中的龙曲线

为什么我的龙曲线看起来不像龙曲线?

龙曲线

这是python中的实现,顺序为10:

这是订单 10 的样子:

龙曲线

编辑:这是我从订单 1 得到的,具有更大的比例曲线:

龙曲线顺序 1

0 投票
2 回答
251 浏览

arrays - J 和 L 系统

我将创建一个可以从L 系统语法生成字符串的程序。

Astrid Lindenmayer 用于模拟藻类生长的原始 L 系统是:

产生:

这是我自己在J中天真地实现的,如下所示:

分步说明:

以此类推,这是生成 Thue-Morse 序列的 L 系统第四次迭代的结果

这是迄今为止我能做到的最好的。我认为这里的装箱-拆箱方法是不够的。这是我第一次错过 J 中的链表——没有它们,编写语法要困难得多。

我真正在想的是:
a)构建构建最终字符串的那些函数的动名词列表(在我的示例中,这些函数是常量,'AB'"0但在树建模函数的情况下是海龟图形命令)并唤起(`:6)它,
或者我能够编码的东西:
b)构建一个合法的J句子字符串,构建最终字符串并执行(".)它。
但我不确定这些程序是否有效。

  • 你能告诉我一个更好的方法吗?

非常感谢任何关于a)b)的提示和评论!

0 投票
1 回答
1300 浏览

algorithm - l 系统节点重写示例

这是我在 stackover flow 中的第一篇文章。最近我开始阅读《植物的算法之美》一书,在第 1 章中,他解释了 L 系统。(你可以在这里阅读章节)。

据我了解,有两种类型的 L 系统。边缘重写和节点重写。

边缘重写相对来说非常简单。有一个初始的起始多边形和一个生成器。初始多边形的每条边(边)都将被生成器替换。

但是这个节点重写是很混乱的。从我收集的信息来看,有两个或多个规则,并且每次迭代都将规则中的变量替换为它们的常量对应项。

对于海龟解释,这些是标准规则

因此,请考虑本网站中显示的示例。http://www.selcukergen.net/ncca_lsystems_research/lsystems.html

所以at n=0(忽略公理中的 X)

它只是F,表示一条向上的直线。

at n=1

用规则替换公理中的 X

F+FF-F+F(再次忽略最后的X)

输出是这个

一个规则的简单示例是可以的。但是在第 25 页的“植物的算法之美”一书中,有一些规则我不知道如何解释。

看到这张图片。

at n=0

只是'X'。不知道这意味着什么

at n=1

应用规则 1 (X->F[+X]F[-X]+X): F[+]F[-]+ 忽略所有 X。这只是一条直线。

应用规则 2 (F->FF):FF[+]FF[-]。这只是一条直线。

据我了解,最终输出应该是乌龟向上移动四次。或者最多最终输出应该只包含四行。

我找到了一个在线L 系统生成器,我认为它可以帮助我更好地理解这一点,所以我输入了相同的值,这是 n=1 时的输出样子

输出绝对不是一条直线,最糟糕的是它有 5 条线,这意味着最终输出方程中应该有 5 个 F。

帮助我理解这个节点重写。在不理解这一点的情况下,我无法进一步阅读这本书。

对不起,很长的帖子,以及前标签中的链接。我不能发布超过 2 个链接。感谢您耐心地从上到下阅读。

0 投票
0 回答
656 浏览

image - L系统分形产生的植物图像的图像相似度指数

我已经在那个论坛上阅读了所有关于图像相似度指数的工作人员,但我认为我的主题有点不同,因为我想要比较的图像来自L 系统生成器,正如你在下面看到的那样,很难找到明显的差异。所以我无法决定为我的问题选择哪种方法和软件。

但是,让我们从头开始讲故事。我收集了一些数据,通过测量一些植物(总共 15 个)的分支的角度和长度,我用 L 系统分形方法表示它们,如前所述。

这些图像看起来像上面的图像:

在此处输入图像描述 A 在此处输入图像描述 厂 B 在此处输入图像描述 厂 C厂

到目前为止,我试图使用两种方法找到差异。

1)通过计算这些图像的分形维数,但正如预期的那样,它们都是2

2) 通过计算同一画布中区域覆盖率的百分比。这种情况下的数字显示出一些差异,但没有统计学意义。

所以我的想法是使用其他相似性索引,但是那里有太多的协议和想法,我找不到起点。我读过关于 OPENCV 、 VisualCI 等的信息,但因为我再也没有使用过这些方法,所以我感到不知何故迷失了方向。

欢迎您提出任何建议。

谢谢你。

0 投票
0 回答
286 浏览

java - 在 L 系统的处理中将 Pvector 点连接到网格中?

我已经使用toxiclib 在Processing 中构建了这个L 系统,我想将每个指定的点连接到树分支中的每个交叉点。我写了一个单独的草图,我试图通过连接三个最近的点来创建一个三角形网格,我已经能够连接三个点,但我希望它能够通过数组列表中的所有顶点然后连接三个最近的点,直到我从数组中的所有顶点中得到一个网格。我还需要能够将整个草图转换为一个函数,我可以将它输入到我的 L 系统中,然后它将返回整个系统,所有点都连接起来以创建网格。从本质上讲,这样我就可以纹理化,如果可能的话,可能会对其应用着色器。我认为我可能正在尝试一种更难的方法来解决这个问题,因为我相信toxiclibs 或 HEMESH 库可以为我完成所有这些,但我一直无法弄清楚。任何帮助将非常感激。

这是我为尝试将所有点连接到网格中而编写的草图的代码。

L 系统也是按照本教程创建的:https ://www.youtube.com/watch?v=qF8LGLVrwfo

0 投票
3 回答
4211 浏览

algorithm - 如何在处理中创建一个简单的 l 系统

我想在处理中创建一个简单的 l 系统。我想将每个字母“A”更改为“AB”,将每个字母“B”更改为“A”,从“A”开始。

结果应如下所示:


(PS我对加工了解不多)