首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在java中用递归实现L系统的龙曲线

在Java中,可以使用递归来实现L系统的龙曲线。L系统(Lindenmayer system)是一种用于描述自然界中生长模式的形式语言。龙曲线是L系统中的一种经典例子。

下面是一个使用递归实现龙曲线的Java代码示例:

代码语言:txt
复制
import java.awt.*;
import javax.swing.*;

public class DragonCurve extends JFrame {
    private static final int WIDTH = 800;
    private static final int HEIGHT = 600;
    private static final int MAX_DEPTH = 15;

    public DragonCurve() {
        super("Dragon Curve");
        setSize(WIDTH, HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        drawDragonCurve(g, MAX_DEPTH, 100, 300, 700, 300);
    }

    private void drawDragonCurve(Graphics g, int depth, int x1, int y1, int x2, int y2) {
        if (depth == 0) {
            g.drawLine(x1, y1, x2, y2);
        } else {
            int dx = (x2 - x1) / 2;
            int dy = (y2 - y1) / 2;

            int x3 = x1 + dx - dy;
            int y3 = y1 + dy + dx;

            drawDragonCurve(g, depth - 1, x1, y1, x3, y3);
            drawDragonCurve(g, depth - 1, x3, y3, x2, y2);
        }
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            DragonCurve dragonCurve = new DragonCurve();
            dragonCurve.setVisible(true);
        });
    }
}

这段代码使用Java的Swing库绘制了一个窗口,并在窗口中绘制了龙曲线。代码中的drawDragonCurve方法使用递归来实现龙曲线的绘制。depth参数表示递归的深度,控制曲线的细节程度。x1y1x2y2参数表示曲线的起始点和终止点。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

用一个图书库实例搞懂二分搜索树的底层原理

一、背景 二叉树是一种常用的数据结构,更是实现众多算法的一把利器。本文将通过建立一个图书库的实例对二叉树中的常用类型:二分搜索树(Binary Search Tree)进行底层原理的深入理解。...3.3、图书类 在图书类的定义中,重写compareTo方法:通过比较ISBN(国际标准书号)的大小表示图书在二叉树的结点顺序。 ?...traverse方法:使用递归方法对所有结点进行遍历 search方法:根据ISBN码查找结点 /** * 用二分搜索树实现图书库--二分搜索树 * * @author zhuhuix * @date...增加元素 public void add(Books data) { this.root = addNode(this.root, data); } // 用递归方法实现结点的添加...二分搜索树的结点是有序的,可以很快地求出最大,最小之类的关系值。 也正是因为二分搜索树的结点是有序的,在极端情况下,二分搜索树会褪化成一个链表

87320

python算法分析与设计实验:科赫雪花实验

参考链接: 科赫曲线或科赫雪花 Python 算法分析与设计实验:科赫雪花实验 一、实验目的 1、熟悉python编程环境,包括程序安装 2、熟悉python基本语法 3、递归算法程序分析与调试  二、...实验工具 Win10操作系统、python3.7编译环境、IDLE编译器  三、实验内容 本次实验是利用递归算法,用python中的绘图库turtle,实现画出科赫雪花。...四、实验过程 本实验采用递归算法完成曲线绘制:如果n=0,直接画出长度为L的直线。...如果n=1(第一次迭代),画出长度为L/3的线段;画笔向左转60度再画长度为L/3长的线段;画笔向右转120度画长度为L/3长的线段;画笔再向左转60度画出长度为L/3的线段。...本次实验设n=3,用for遍历循环角度,在最外层的循环执行后,再调用下一阶及相应的长度。

1.5K21
  • 【数值计算方法(黄明游)】函数插值与曲线拟合(二):Newton插值【理论到程序】

    插值(Interpolation)   指通过已知数据点之间的插值方法,来估计或推算出在这些数据点之间的数值。插值可以用于构建平滑的曲线或曲面,以便在数据点之间进行预测或补充缺失的数据。 2....拟合可以用于数据分析、曲线拟合、回归分析等领域。 3. 投影(Projection)   指将一个向量或一组向量映射到另一个向量空间或子空间上的过程。...Newton插值的基本思想是使用差商来递归地构建一个多项式。差商是通过递归地计算数据点之间的差分来定义的。...Newton插值的优点之一是它可以通过添加更多的数据点来逐步改进插值结果。然而,同Lagrange插值一样,它也存在龙格现象(Runge’s phenomenon),导致在边界处产生振荡。 3....Newton插值的优点是在计算差商时可以重复使用已计算的差商值,从而减少计算量。

    12710

    灰色关联度分析(Grey Relation Analysis,GRA)原理详解

    简单来讲,就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱,再直白一点,就是说:我们假设以及知道某一个指标可能是与其他的某几个因素相关的,那么我们想知道这个指标与其他哪个因素相对来说更有关系...( note : 灰色系统这个概念的提出是相对于白色系统和黑色系统而言的。这个概念最初是由控制科学与工程(hhh熟悉的一级学科)的教授邓聚龙提出的。...按照控制论的惯例,颜色一般代表的是对于一个系统我们已知的信息的多少,白色就代表信息充足,比如一个力学系统,元素之间的关系都是能够确定的,这就是一个白色系统;而黑色系统代表我们对于其中的结构并不清楚的系统...对于所有子序列,这个分子是相同的,所以实际上,这个系数pseudo_zeta是与第k个维度上,子序列与母序列的距离(差的绝对值,通常叫做l1范数(l1-norm))成反比,也就是说,这两个数距离越远,我们认为越不相关...: (由于论文中用了所有的因子,导致max max 这个全局最大值不同,所以计算出的关联度数值与复现计算的结果数值不一样,但是这三个因子的关联度的排序是一致的,说明关联度是一个相对的指标,它反映的是不同因子与参考内容的关联程度

    6.9K20

    数学建模--插值算法

    三次样条插值是一种分段多项式插值方法,每个区间使用三次多项式,并保证在各节点处的一阶和二阶导数连续。这种方法可以有效避免高次多项式插值可能出现的龙格现象。...工程应用:在GPS/INS组合导航系统中,牛顿插值法被用于动力学模型的构建,以提高系统的精度和稳定性。 编程实现 Python是一种强大的编程语言,提供了丰富的库来实现各种插值算法。...灵活性和计算速度折中:三次样条插值在灵活性和计算速度之间进行了合理的折中,只需较少的计算和存储资源即可实现较好的效果。...在Python中,有多个高效库和工具可以用于实现插值算法。...以下是一些主要的库及其优缺点: NumPy: 优点:NumPy是Python中用于科学计算的基础库,提供了强大的数组操作功能和一些基本的数学函数。

    17910

    ☆打卡算法☆LeetCode 21、合并两个有序链表 算法解析

    大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。...如果不是的话,就需要判断两个链表谁的头结点的值更小,然后递归地决定下一个添加到结果里的节点。...2、代码实现 采用递归解题,如果两个链表一个为空,递归结束,代码参考: public class Solution { public ListNode MergeTwoLists(ListNode...因为每次调用递归都会去掉 l1 或者 l2 的头节点(直到至少有一个链表为空),函数 mergeTwoList 至多只会递归调用每个节点一次。...递归调用 mergeTwoLists 函数时需要消耗栈空间,栈空间的大小取决于递归调用的深度。结束递归调用时 mergeTwoLists 函数最多调用 n+m 次,因此空间复杂度为 O(n+m)。

    19730

    数组中的第K个最大元素 算法解析

    大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。...请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。...在分解的过程中,对子数组进行划分,会出现两种情况: 1、划分得到的q正好是我们需要的下标,直接返回a[q] 2、如果q比目标下标小,就递归右子区间,否则递归左子区间 这样将原来递归两个区间变成递归一个区间...比如数组的长度为n,可以划分为1和n-1两个子数组。 在递归的时候又向n-1的集合中递归,这种是最坏的情况,时间复杂度为O(n2)。...在代码中引入了随机化来加速这个过程,实际的时间代价为期望的O(n)。

    28720

    发布AI芯片昆仑和百度大脑3.0、L4自动驾驶巴士量产下线,这是百度All in AI一年后的最新答卷

    一年的时间过去了,今天在同样地点举行的第二届开发者大会上,李彦宏说道:去年我吹过一个牛,百度的 L4 级别无人驾驶车的量产,会在 2018 年的 7 月份。今天我要说的是,这个牛,马上就要实现了!...本次大会的亮点: 全球首款 L4 自动驾驶巴士「阿波龙」量产下线 中国第一款全功能云端 AI 芯片「昆仑」 发布百度大脑 3.0 推出百度智能小程序 全球首款 L4 自动驾驶巴士「阿波龙」量产下线 首先亮相的是百度创始人...在大会的主 Keynote 环节中,李彦宏介宣布,全球首款 L4 级自动驾驶巴士量产下线。此自动驾驶巴士由百度与金龙客车合作制造,取名为阿波龙。...当前,阿波龙巴士在北京雄安、广州、深圳、东京等地开始商业运营。其中阿波龙客车在东京的商业运营,是百度与软银合作进行的。 ?...结语 一年一度的百度 AI 开发者大会的主题词「Create」来自编程语言中用于创建新内容的函数,更意味着从无到有地创造新事物,在已知已有的领域进行革命性创新。

    46930

    天天肝大厂面试题?这几个面试必考算法你掌握了吗?

    在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口,在递归调用的过程当中系统为每一层的返回点、局部变量等开辟了栈来存储。...2、确定终止条件,防止出现死循环, 特征和典型的应用场合 递归次数过多容易造成栈溢出,所以在使用递归算法时应该考虑问题的规模。它有两个常见的应用场景。...在求解子问题时,往往继续采用同样的策略进行,即继续分解问题,逐个求解,最后合并解,这种不断用同样的策略求解规模较小的子问题,在程序设计语言实现时往往采用递归调用的方式实现, 解题步骤 分治法的过程主要分为三个步骤..., 其基本思想是:将原问题分解为相似的子问题,在求解过程中通过子问题的解求出原问题的解,动态规划实际上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态。...算法原理 动态规划法通常以自底向上的方式求解各个子问题,分多阶段进行决策,其基本思想是,按时空特点将复杂问题划分为相互联系的若干个阶段,在选定系统行进方向后,逆着这个行进方向,从终点向始点计算,逐次对每个阶段寻找某种决策

    47640

    PowerBI HR组织架构层级通用计算模型

    在企业组织中,涉及到非常多和组织架构层级有关的计算,本文给出通用计算模型。 这种模型具有两个特点: 表的递归关系 递归关系展开 先来看一个示例。...表示一个公司 一般用如下结构表示一个公司: 公司的结构本质是递归的,也就是在一个表中,除了当前节点,还要指出它的上级节点。...效果展示 首先给出效果上的展示,如下: 右边给出两种可能的展示效果: 部门汇总型 给出直接管理人员的KPI 给出包括子级所有人员的KPI 人员独立型 给出不同人员的单独KPI 层级展开的实现方法 表的递归关系在表示组织结构的时候非常有效...对于递归的层级问题,理论上可以展开很多,但考虑到真实的业务环境,一个企业或某种系统,一般不会有这么多层级,不然是很难管理的,这就保证了实际当中,这种展开往往达到四个层级就比较多了。...第一种模式: 第二种模式: 总结 本文给出了 HR 组织架构层级通用计算模型,与传统讲解 DAX 的理论不同,这里给出了三个重要套路: 定义自递归表以及在 PBI 中用两步实现层级展开 将 Org 和

    1.6K20

    贝塞尔曲线

    ,递归实现的线性变化。...,然后在该线段上再取一点使得该线段被分为 t 和 1-t,那么就会得到下图: 如果有更多的控制点,我们也可以使用相同的方法来求出曲线上的一点,如下图是四个控制点求曲线上一点的过程: 伯恩斯坦多项式与de...Casteljau算法 拿最简单的二阶贝塞尔曲线举例,如下图: 图中蓝色的点为控制点,他们的坐标我们是知道的,那么通过线性插值,我们可以得到求出红色点的坐标: \begin{array}{l}P_{...因此我们就可以使用de Casteljau算法来算曲线上任意一点的坐标,该算法是计算伯恩斯坦多项式的一种递归算法,直接方法相比较慢,但它在数值上更为稳定。...现在我们来看看怎么直接使用伯恩斯坦多项式得到递归的结果。

    11710

    ☆打卡算法☆LeetCode 23、合并K个升序链表 算法解析

    大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。 一、题目 1、算法题目 “将链表数组合并到一个升序链表中。”...1->1->2->3->4->4->5->6 示例 2: 输入: lists = [[]] 输出: [] 二、解题 1、思路分析 这个题可以采用分治和递归的思路进行解决。...然后用递归实现分治算法。 2、代码实现 代码参考: /** * Definition for singly-linked list....函数 MergeKLists 的时间复杂度为 O(k logk)(分治),函数 MergeTwoLists 的时间复杂度是 O(n),因此总的时间复杂度为 O(n∗k∗logk)。...空间复杂度: O(logk) 递归会使用到 O(logk) 空间代价的栈空间。 三、总结 结束条件:left == right,即只剩下一个链表,无须合并,直接返回。

    13220

    归并排序和快速排序

    归并排序         定义:归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。...{18, 20, 30, 46, 51, 67, 82, 95} 整体的递归思路就是:  代码执行: import java.util.Arrays; public class MergeSort...= 0; l l++) { //让temp数组放到左半段和右半段有序的数据 a[left + l] = temp[l];...对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 4)重复上述过程,可以看出,这是一个递归定义。...]赋给a[i++],以及找出a[i]大于temp的时候把a[i]赋给a[j--] 4)不断递归进行排序 代码执行: import java.util.Arrays; public class quickSortDemo

    17320

    日新进用户200W+,解密《龙之谷》手游背后的压测故事

    上线当日百度指数超过40万,微信游戏平台数据显示预约数780多万,而据内部人员透露当日新进用户200W+,这就是《龙之谷》手游在安卓平台上所取得的成绩。...,成功实现模拟客户端的机器人开发,并产生最高每秒并发上万的压力。...二、实现方案 测试的目标 容量测试: √ 单服并发用户数:XXX人 √ 各协议响应时间:<1秒 √ 事务成功率:>99.9% 稳定性测试: 综合场景压测48小时无问题,关注各系统资源稳定性...录像效果 主城移动测试:https://v.qq.com/x/page/l03860ij85k.html 世界boss测试:https://v.qq.com/x/page/l0386whm8qt.html...此次腾讯测试团队正是利用腾讯WeTest的服务器性能测试功能实现模拟机器人的协议配置,最终实现了《龙之谷》手游的平稳上线。

    2K00

    计算机处理器那些事儿

    用在服务器上的CPU主要是至强(Xeon)系列。 AMD AMD的系列要更多一些。其中用于服务器的主要为Epyc(霄龙)系列。 ARM ARM主打低功耗,它有以下这些种类。...核心数量和缓存 AMD EPYC霄龙:提供多种核心数量选项,最高可达192核心和384线程,支持高达384MB的L3高速缓存。...Intel至强:也提供安全特性,但具体的安全功能和实现方式可能与AMD有所不同。...PowerPC: PowerPC是苹果电脑和IBM在1990年代和2000年代早期使用的一种指令集架构,现在主要用于嵌入式系统。...当前服务器高端市场主流的CPU还是Intel与AMD厂商,从项目的性价比角度出发,最终我们推荐了AMD的第四代EPYC霄龙CPU,因为AMD同代次的CPU要比Intel价格更优,同时我在的云厂商也有着规模采购优势

    11410

    javaweb(四)——过滤器与监听器

    带通滤波器常用于音频处理、通信系统等领域。 Java代码实现: public class BandPassFilter {<!...无限脉冲响应(IIR)滤波器 无限脉冲响应(IIR)滤波器是一种基于反馈系统的滤波器,其特点是具有无限长度的单位冲激响应。IIR滤波器可以通过递归运算来实现,因此也称为递归滤波器。..."Stable" : "Unstable"); } } 以上是数字滤波器的稳定性判断方法及其在Java中的实现。...实际应用 了解滤波器在实际应用中的常见场景,如音频处理、图像处理、通信系统和控制系统等方面的应用。 滤波器在实际应用中广泛存在,涉及到许多领域,包括音频处理、图像处理、通信系统和控制系统等。...Java中的实现,在控制系统中,我们还可以通过MATLAB和Simulink来进行更加高级的滤波器设计与应用。

    20810

    「递归」第5集 | 从网瘾少年到极客大神:没有什么是一段代码解决不了的

    我们为什么叫「递归」 “递归” (recursion) 是一种在程序设计语言中被广泛使用的算法。它有两大特点,一是调用自己,二是化繁为简。我们当中那些优秀的技术人又何尝不是如此?...一个“网瘾少年”的极客之路 在鹅厂,技术大牛的故事总是为人所传说。对于加入鹅厂近10年的龙哥,也不例外。江湖传闻说,龙哥从初中就开始写代码了。龙哥却谦虚地解释,那个时候自己只是个“网瘾少年”。...从参赛选手到出题人,这一路龙哥也颇有感受:“在平时工作中,大家都是在各自的领域去解决不同的问题。...” 天幕项目——挑战与坚守 腾讯天幕,即网络入侵防护系统(Network Instrusion Prevention System, NIPS),基于腾讯安全技术的积累,通过旁路部署方式,提供双向流量逐包检测和...没有什么是一段代码解决不了的 在日常生活中,龙哥也把极客精神发挥到了极致:从帮老婆写代码工具减轻工作量,到用代码解决孩子证件照背景颜色问题,再到为孩子准备的代码解密生日礼物,龙哥表示“代码它是一个很好的生活技能

    94851

    linux使用find和crontab命令定期清理过期文件

    crontab 命令 crontab 命令是 Linux 中用来设定重复执行命令或脚本的工具。它能够在指定的时间段内,按照需求以某一时间间隔执行命令或脚本。...crontab -e 则会启动系统默认的编辑器。...花式定时 在 crontab 命令中用于定时的前 5 列中,支持以下符号,用于「花式定时」: 星花(*):代表所有可能的值; 逗号(,):用逗号隔开同一字段的不同范围; 连字符(-):用连字符连接两个整数...及子目录下递归地查找所有上次访问在 7 天以前的文件,并打印在标准输出中 find . -mmin -10: 在当前目录 (.)...及子目录下递归地查找所有上次修改在 10 分钟以内的文件,并打印在标准输出中 -newer file1 !

    1.9K20

    属于算法的大数据工具-pyspark

    spark是目前大数据领域的核心技术栈,许多从事数据相关工作的小伙伴都想驯服它,变成"驯龙高手",以便能够驾驭成百上千台机器组成的集群之龙来驰骋于大数据之海。 但大部分小伙伴都没能成功做到这一点。...最近我的好友"算法美食屋"公众号的作者云哥开源了一个pyspark教程:《10天吃掉那只pyspark》,给有志于成为大数据"驯龙高手"的小伙伴带来了福音,以下是这个教程的目录,简直就是驯龙秘笈有木有?...此外spark-scala支持spark graphx图计算模块,而pyspark是不支持的。 pyspark学习曲线平缓,spark-scala学习曲线陡峭。...从学习成本来说,spark-scala学习曲线陡峭,不仅因为scala是一门困难的语言,更加因为在前方的道路上会有无尽的环境配置痛苦等待着读者。 而pyspark学习成本相对较低,环境配置相对容易。....html #java安装教程:https://www.runoob.com/java/java-environment-setup.html #step2: 安装pyspark,findspark pip

    1.2K30
    领券