探索递归艺术:使用 Context Free 的分形

原文:towardsdatascience.com/exploring-recursive-art-fractals-with-context-free-58a9f045d0f3

在人工智能生成的艺术作品吸引眼球的同时,我们很容易忽视简单、基于规则的生成艺术的魅力。本文介绍了无上下文艺术,这是一个工具,它允许你使用基本的规则和递归来创建复杂、美丽的图案。

Context Free Art 是生成分形、树和其他模式的最小编码的理想选择。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ac06c5de98060501cb35a280b9afda74.png

作者使用 Context Free 创建的生成艺术作品

这是一个递归、基于规则的生成程序,它提供了一种直观的方式来观察复杂模式如何从简单、结构化的规则中产生。通过定义基本的“语法”形状和变换,我们可以观察复杂的图案一层层展开。这种方法不仅提供了一种视觉上吸引人的递归探索方法,而且还说明了简单的、可重复的规则如何模拟自然系统和抽象数据结构中的复杂性。

🔍 让我们探索简单的算法如何导致复杂的结构。如果这听起来很有趣,下载软件来跟随学习吧 🙂

简介

Context Free(以及命令行工具 cfdg)是一个数字艺术程序,它接受图像的描述并将其生成为位图、矢量图像,甚至电影。

Context Free 的魔力在于其递归性质:形状可以包含其他形状,而这些形状又可以包含更多的形状。这种递归分层允许从简单的指令中产生复杂和精细的设计。随着我们深入探索,你将看到这个过程如何使创建详细和动态的生成艺术成为可能。

让我们从创建一个简单的程序开始。

开始

在 Context Free 中编写一个简单的程序涉及几个关键组件:

  1. 形状:图像中的基本图形元素,例如正方形、圆形和三角形。

  2. 规则:形状的绘制和变换方式。规则可以指定大小、位置、旋转和其他属性。

  3. Startshape:这是你绘画的起点。它告诉 Context Free 从哪个形状开始。

由于这是一个视觉软件。让我们通过查看一些代码示例来了解这些元素是如何一起工作的。

示例 1:一个简单的矩形

要绘制一个单独的正方形,我们可以在程序顶部的工具栏上输入并按下 渲染 按钮。

startshape RECTANGLE
shape RECTANGLE
rule {
    SQUARE []
}

在这里,我们可以看到我们上面介绍的所有三个元素。它们的结果是一个正方形。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/183fde4921d0818cbda3d5160f3bbc2f.png

出现了一个矩形

简单来说,在这段代码中:

  1. startshape RECTANGLE告诉 Context Free 要绘制的初始形状称为 RECTANGLE。这是设计的起点。

  2. 然后我们定义 RECTANGLE 形状。在这个形状中,我们通过包含规则来指定它将如何绘制

  3. 在这种情况下,我们只有一个规则,它是一个原始的 SQUARE[]。这指示 Context Free 画一个正方形。

您可以尝试的其他常见原始形状包括:CIRCLE[]TRIANGLE[]。它们的工作方式相同。

示例 2:添加规则选项

SQUARE[] 中的空方括号 [] 表示没有变换(如缩放、旋转或移动)。要改变这一点,您可以更改规则属性:

  • s:大小

  • x:X 坐标

  • y:Y 坐标和

  • r:旋转

如下所示:

startshape EXAMPLE
shape EXAMPLE
rule {
    SQUARE [s 1 x 0 y 0]  // Center square
    SQUARE [s 1.5 x 3 y 3 r 45]  // Smaller, rotated, blue square
}

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/07568ae18d270155f9822a538c0469c4.png

在这个例子中,我们的起始形状 EXAMPLE 由两个正方形组成。

  1. 第一个 SQUARE[s 1 x 0 y 0] 位于中心,大小为 1。

  2. 第二个 SQUARE [ s 1.5 x 3 y 3 r 45 ] 是 1.5 倍大,旋转 45 度,放置在坐标 (3,3)。

到目前为止,一切顺利。

示例 3:一个逐渐变小的矩形

接下来,让我们通过在形状内部调用形状来介绍递归,以创建更有趣的图案。

我们将制作一个向上移动时逐渐缩小的矩形。为此,我们将在自身内部调用形状 RECTANGLE 并调整其垂直位置(y)和大小。

startshape RECTANGLE
shape RECTANGLE
rule {
    SQUARE []
    RECTANGLE [y 0.95 s 0.97]
}

在这个例子中,RECTANGLE 形状先画一个正方形,然后递归地调用自身,并稍微向上移动(y 0.95)以及缩小比例(s 0.97)。这种递归创建了一系列逐渐缩小并向上爬升的正方形,形成了一个堆叠的、逐渐缩小的正方形图案。

🚀 注意:在 Context Free Art 中,y 的正值将形状向上移动,而负值将形状向下移动。在这里,y 0.95 将每个正方形向上移动 0.95 个单位,使其堆叠在之前的形状之上。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/23d028faf75338652b665758627c42ce.png

一个规则——矩形的大小会随着 y 坐标的变化而逐渐减小。

递归在生成的形状达到最小大小时结束,此时程序停止进一步的递归并产生最终结果

这种自我限制的递归赋予了 Context Free Art 从简单指令中创建复杂、有机图案的神奇能力。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1ef23a78b2a1c053492c9da6e2787999.png

Daniele Levis PelusiUnsplash 上的照片

示例 4:一个分裂的矩形

现在,让我们让矩形在变小时“分支”出来,创建一个带有分裂的图案。

startshape RECTANGLE

shape RECTANGLE
rule {
    SQUARE []
    RECTANGLE [y 0.95 s 0.97]
}
rule 0.03 {
    RECTANGLE [r 45 s 0.5]
    RECTANGLE [r -45 s 0.5]
}

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/cfb226b729b53de35b4b5b5380b03be8.png

分支 – 添加第二个规则

在这个例子中,我们有两个规则:

  1. 第一条规则先画一个正方形,然后递归地调用 RECTANGLE,稍微向上移动(y 0.95)并使其稍微变小(s 0.97)。

  2. 第二个规则,以 3%的概率(规则 0.03)指定,偶尔会导致矩形“分裂”成两个更小的矩形

  • 一个矩形向右旋转 45 度(r 45)并缩小到原来的一半大小(s 0.5)。

  • 另一个矩形向左旋转 45 度(r -45)并也缩小到原来的一半大小。

换句话说:在每次迭代中,97%的时间矩形被缩小并仅向上移动,正如我们第一个规则所定义的。但 3%的时间,会制作两个新的旋转的RECTANGLE形状。这引入了分支!

示例 5:创建生成树 🌱

现在我们对形状、规则和递归有了基本理解,我们准备了一个更完整的示例,其中包含更多形状,每个形状都有不同的规则集。

startshape SPIKE

// CF::Symmetry = CF::Dihedral, 2

shape SPIKE
rule {
    SQUARE []
    SPIKE [y 0.95 s 0.97]
}
rule 0.03 {
    CIRCLE []
    SPIKE [r 90 f 2]
    SPIKE [r -90]
}
rule 0.03 {
    tree[]
}

shape tree
rule 20 {
    SQUARE[]
    tree [s .99 y .995 r 2]
}
rule 1 {
    SQUARE[]
    tree [r 10 s .8 y .995 b .07 z - .07]
    tree [r 10 s .8 y .995 f 90 b .01 z -.01]
}
rule 1 {
    SQUARE[]
    tree [s .99 y .995 f 90]
    tree [r 10 s .5 y .995 b .07 z -.07]
    tree [r 10 s .5 y .995 f 90 b .01 z -.01]
}
rule 10 {
    SQUARE[]
    tree [s .99 y .995 r 2 f 90]
}

结果是一个对称的、类似树的结构,带有尖刺和分支,通过递归缩放、定位和低概率分支规则实现。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ba16fb2fba7680e8bf476f913a25770a.png

形状 SPIKE 内部的递归增强了生成路径的复杂性。

  • 起始形状:SPIKE 是主要形状,它通过递归绘制一个缩小的正方形(s 0.97)并每次迭代向上移动(y 0.95),形成堆叠效果。

  • 变化规则:偶尔,通过将 SPIKE 旋转 90°和-90°来添加圆形形状和侧分支,创建横向尖刺。另一个规则引入了树形,为主结构增加了多样性。

  • 形状树:树形通过多个规则添加了分支

示例 6:引入对称性

一种简单的方法是引入对称性,使复杂的图案更具视觉吸引力。

如果你取消上面代码中的注释行:

startshape SPIKE
CF::Symmetry = CF::Dihedral, 2

(...)

重新运行代码。我们在中心添加了对称性,镜像设计并创建了一个平衡、自然的视觉效果。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8c3e37fc00cc3defeaa6c3553ecc93af.png

二面体对称性沿中心轴镜像设计,创建平衡且复杂的图案。在这种情况下,我们看到使用 CF::Symmetry = CF::Dihedral, 2 的不同变化。

这个对称性函数对于生成复杂、自然的外观图案非常强大。你可以通过增加对称性值到 3、4 或更高来进一步实验,每次增加都会创建独特且有趣的结构的增量。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7f5d857406dcb7524f1026851171c763.png

具有 CF::Symmetry = CF::Dihedral, 5 的不同变化。

最好的部分?每次运行代码时,它都会生成设计的一个不同版本,所以你每次都会得到一个新的变化——保持图像的新鲜和惊喜!


感谢阅读,祝您实验愉快!

我们已经涵盖了众多内容,从创建简单的形状和递归图案到添加对称性以制作复杂、引人注目的设计。Context Free 是一个非常适合对生成艺术感兴趣的任何人的绝佳游乐场。

🎨 学习起来很简单,而且结果总是让人惊喜连连。看着几行代码在每次渲染时都变得生动起来,每次都能创造出独一无二的设计,这感觉真的很神奇。

然而,我们只是触及了皮毛,如果你想要了解更多,可以查看维基页面

免责声明:我以任何方式都与 Context Free 及其创作者无关;我只是觉得它是一个探索生成艺术的有趣工具,并且认为它可能值得分享。

内容概要:本文介绍了一个基于冠豪猪优化算法(CPO)的无人机三维路径规划项目,利用Python实现了在复杂三维环境中为无人机规划安全、高效、低能耗飞行路径的完整解决方案。项目涵盖空间环境建模、无人机动力学约束、路径编码、多目标代价函数设计以及CPO算法的核心实现。通过体素网格建模、动态障碍物处理、路径平滑技术和多约束融合机制,系统能够在高维、密集障碍环境下快速搜索出满足飞行可行性、安全性与能效最优的路径,并支持在线重规划以适应动态环境变化。文中还提供了关键模块的代码示例,包括环境建模、路径评估和CPO优化流程。; 适合人群:具备一定Python编程基础和优化算法基础知识,从事无人机、智能机器人、路径规划或智能优化算法研究的相关科研人员与工程技术人员,尤其适合研究生及有一定工作经验的研发工程师。; 使用场景及目标:①应用于复杂三维环境下的无人机自主导航与避障;②研究智能优化算法(如CPO)在路径规划中的实际部署与性能优化;③实现多目标(路径最短、能耗最低、安全性最高)耦合条件下的工程化路径求解;④构建可扩展的智能无人系统决策框架。; 阅读建议:建议结合文中模型架构与代码示例进行实践运行,重点关注目标函数设计、CPO算法改进策略与约束处理机制,宜在仿真环境中测试不同场景以深入理解算法行为与系统鲁棒性。
在科技快速演进的时代背景下,移动终端性能持续提升,用户对移动应用的功能需求日益增长。增强现实、虚拟现实、机器人导航、自动驾驶辅助、手势识别、物体检测与距离测量等前沿技术正成为研究与应用的热点。作为支撑这些技术的核心,双目视觉系统通过模仿人类双眼的成像机制,同步获取两路图像数据,并借助图像处理与立体匹配算法提取场景深度信息,进而生成点云并实现三维重建。这一技术体系对提高移动终端的智能化程度及优化人机交互体验具有关键作用。 双目视觉系统需对同步采集的两路视频流进行严格的时间同步与空间校正,确保图像在时空维度上精确对齐,这是后续深度计算与立体匹配的基础。立体匹配旨在建立两幅图像中对应特征点的关联,通常依赖复杂且高效的计算算法以满足实时处理的要求。点云生成则是将匹配后的特征点转换为三维空间坐标集合,以表征物体的立体结构;其质量直接取决于图像处理效率与匹配算法的精度。三维重建基于点云数据,运用计算机图形学方法构建物体或场景的三维模型,该技术在增强现实与虚拟现实等领域尤为重要,能够为用户创造高度沉浸的交互环境。 双目视觉技术已广泛应用于多个领域:在增强现实与虚拟现实中,它可提升场景的真实感与沉浸感;在机器人导航与自动驾驶辅助系统中,能实时感知环境并完成距离测量,为路径规划与决策提供依据;在手势识别与物体检测方面,可精准捕捉用户动作与物体位置,推动人机交互设计与智能识别系统的发展。此外,结合深度计算与点云技术,双目系统在精确距离测量方面展现出显著潜力,能为多样化的应用场景提供可靠数据支持。 综上所述,双目视觉技术在图像处理、深度计算、立体匹配、点云生成及三维重建等环节均扮演着不可或缺的角色。其应用跨越多个科技前沿领域,不仅推动了移动设备智能化的发展,也为丰富交互体验提供了坚实的技术基础。随着相关算法的持续优化与硬件性能的不断提升,未来双目视觉技术有望在各类智能系统中实现更广泛、更深层次的应用。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值