首页
学习
活动
专区
工具
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); } // 用递归方法实现结点添加...二分搜索树结点是有序,可以很快地求出最大,最小之类关系值。 也正是因为二分搜索树结点是有序极端情况下,二分搜索树会褪化成一个链表

86620

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.4K21
  • 【数值计算方法(黄明游)】函数插值与曲线拟合(二):Newton插值【理论到程序】

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

    10910

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

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

    5.9K20

    数学建模--插值算法

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

    9710

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

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

    19330

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

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

    28220

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

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

    46330

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

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

    47240

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

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

    1.6K20

    ☆打卡算法☆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,即只剩下一个链表,无须合并,直接返回。

    12920

    归并排序和快速排序

    归并排序         定义:归并排序是建立归并操作上一种有效,稳定排序算法,该算法是采用分治法(Divide and Conquer)一个非常典型应用。...{18, 20, 30, 46, 51, 67, 82, 95} 整体递归思路就是:  代码执行: import java.util.Arrays; public class MergeSort...= 0; l < temp.length; 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

    16920

    贝塞尔曲线

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

    10410

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

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

    92051

    日新进用户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服务器性能测试功能实现模拟机器人协议配置,最终实现了《之谷》手游平稳上线。

    1.9K00

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

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

    20110

    编程语言对比手册-纵向版

    前言: 语言对比手册是我一直想写一个系列:经过认真思考,我决定从纵向和横行两个方面 来比较Java,Kotlin,Javascript,C++,Python,Dart,六种语言。...Dart2.1.0 文件操作是作为每个编程语言必备模块,本文将看一下六种语言对文件操作 ---- 一、Java版 1.创建文件夹:G:/Out/language/java/应.txt /.../应-GBK.txt"; String pathUTF8 = "G:/Out/language/java/应-UTF8.txt"; mkFile(path); String content =...当然用javaapi也是可以 val content = "应----张风捷特烈\n" + "一游小池两岁月,洗却凡世几闲尘。\n" + "时逢雷霆风会雨,应乘扶摇化入云。"...'rs' - 以同步方式读取文件。 'rs+' - 以同步模式打开文件用于读取和写入。指示操作系统绕开本地文件系统缓存。 'w' - 打开文件用于写入。

    1.2K40

    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
    领券