算法可视化

2023-10-26

软件功能--以数组为例

一个数组是一个容器.
对其进行可视化,
主要针对数组的值查找,指定位置插入,指定位置删除进行可视化.
软件针对每个数据结构可视化分两个方面:
教学模式:主要针对数据结构每个方面进行讲解,可动画演示.
实践模式:允许使用者自己通过增加/删除/搜索执行数据结构支持的操作,且将操作过程以动画形式展现.

数组-教学模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

数组--实践模式

在这里插入图片描述
在这里插入图片描述

技术层面

一个通用2D建模体系

一个描述点/线/矩形/...的基础结构体系

在这里插入图片描述

一个描述2D几何对象的体系

在这里插入图片描述

通过上述类型,
我们既可以描述单独的2D点/线/椭圆/矩形/多段线/文字对象,
又可以通过GeometryGroup描述这些对象的任意层次的嵌套和叠加.

矩阵支持
为了实现2D对象的运行与变化,
我们需要对2D对象进行变换,
而变换依赖于矩阵.

在这里插入图片描述

2D变换体系

在这里插入图片描述

一个通用2D渲染体系

为了完成一个2D对象的绘制,我们构建一个Drawing体系

在这里插入图片描述

一个Drawing基类实现一个2D对象绘制

在这里插入图片描述

为了完成2D对象间父子关系,
一父多子,控制属性等信息的描述,
我们需要对2D对象进行建模.需要一个Model体系来支撑.

在这里插入图片描述在这里插入图片描述

一个动画驱动体系

2D动画需要不断给2D模型对象发送控制信息,
来实时控制2D对象的呈现,并实时绘制.
一般采用1秒50次的刷新频率来保持动画呈现的流畅.
为了实现动画的驱动,需要一个机制:
1.生成原始控制文件
2.对控制文件进行解析得到NCCODE.
每个NCCODE描述的是一段时间下各个对象的运动.
3.对NCCODE进行插补得到NCSTEP,
以得到一个设定的较小的时间间隔内对应的各个2D对象的运动量.
4.对NCSTEP进行处理,每个NCSTEP处理后,
2D对象的属性被相应更新,据此可以进行对应的界面刷新.
源源不断的解析文件,产生NCCODE
NCCODE产生源源不断的NCSTEP
界面线程再每隔一个刷新周期取一个NCSTEP来更改2D对象属性,
并渲染显示.
这样就完成了一个持续的2D动画过程.

动画服务

在这里插入图片描述

这里的
解析动画驱动文件产生NCCODE
对NCCODE进行插补产生NCSTEP
对NCSTEP进行处理得到NCSHOW
界面线程通过定时器取NCSHOW进行显示
上述4个过程,每个过程均采用一个线程实现.
每个过程对下一个过程来说是生产者,对上一个来说是消费者.
这样也构成了一个四个线程协作来完成一个任务的流水线.

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

针对要支持的NCCODE指令,我们用一个体系来描述,
这样我们可以支持移动/改变颜色/提示/...等各类控制指令,
且易于动态扩展.

在这里插入图片描述

每个NCCODE需要经过插补,产生NCSTEP,
以方便后续使用.
一般一个NCCODE类型有一个与之对应的NCSTEP类型.

在这里插入图片描述

为了提高动画绘制效率,
对于产生的NCSTEP,
我们可让一个线程负责,
取产生的NCSTEP,
并依据NCSTEP进行对2D模型的修改,
将修改后的模型进行绘制,
这样界面线程取出的NCSHOW里面包含了依据绘制好的图片,
就不需要每次界面线程在定时回调里再做更改模型,
绘制模型的工作了.
可以提升动画流畅性.
为此构造一个NCSHOW体系,存储NCSTEP处理结果.

在这里插入图片描述

其他

- 项目进展
1.通用2D建模&渲染已经完成.
2.2D动画驱动已经完成.
由于时间关系,仅针对数组进行了可视化的应用.
后续有时间可以扩展到对
链表/栈/队列/堆/哈希表/二叉树/红黑树/图/...等结构的支持,
以构成一个完备的软件.
- 基于的技术&支持的平台
1.基于C++&QT在Linux平台构建.
2.目前客户端软件仅在Linux桌面运行,由于Qt的跨平台特性,
易于移植到Windows客户端,待以后处理.

参考资料

1.C++ Primer
2.Qt 5.9 C++开发指南
3.图形学
4.线性代数
5.Unix环境高级编程
6.算法导论
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法可视化 的相关文章

  • 《深入浅出话数据结构》系列之什么是B树、B+树?为什么二叉查找树不行?

    本文将为大家介绍B树和B 树 首先介绍了B树的应用场景 为什么需要B树 然后介绍了B树的查询和插入过程 最后谈了B 树针对B树的改进 在谈B树之前 先说一下B树所针对的应用场景 那么B树是用来做什么的呢 B树是一种为辅助存储设计的一种数据结
  • 达梦DCA认证培训和考试

    本人有幸参加了达梦DCA认证培训并参加了认证考试 培训内容包括 第一天 国产数据库现状及未来 DM8企业版安装 创建数据库及数据库实例管理 DM8体系结构 第二天 表空间管理 用户管理 DMSQL 第三天 模式对象管理 备份还原 配置作业

随机推荐

  • 数据结构课程设计 最小生成树,拓扑排序以及最短路径

    通信网络的架设问题 问题描述 若要在n 10 个城市之间建设通信网络 只需要架设n 1条线路即可 如何以最低的经济代价建设这个通信网 是一个网的最小生成树问题 基本要求 1 利用二种方法 Prim算法和克鲁斯卡尔 Kruskual 生成网中
  • 阿里Java后端电话面试

    生平第一次面试 还是阿里 非常紧张 因为是校招 所以面的比较简单 都是我简历上说熟悉的东西 回答的不是很理想 面试官说我广度还行 深度差的比较多 面试官 你好同学 我是蚂蚁金服的 现在方便面试吗 我 方便方便 面试官 请简单介绍一下自己 这
  • Fultter学习日志(2)-构建第一个flutter应用

    依照上一篇中我们新建的flutter应用 让我们更改pubspec yaml中的内容为 name namer app description A new Flutter project publish to none Remove this
  • 在 Python Lambda 中使用 Await

    异步编程不是多线程或多进程 相反 它是并发编程 我们可以运行一个可能长时间运行的任务 并允许我们的程序在该任务仍在运行时响应其他任务 而不是等待完成 对于异步编程 HTTP 请求操作或用户选择可能会花费大量时间 因此 允许其他任务在这些操作
  • 100天精通Python(数据分析篇)——第72天:Pandas文本数据处理方法之判断类型、去除空白字符、拆分和连接

    文章目录 每篇前言 一 Python字符串内置方法 1 判断类型 2 去除空白字符 3 拆分和连接 二 Pandas判断类型 1 str isspace 2 str isalnum 3 str isalpha 4 str isdecimal
  • mysql存储过程和存储函数

    一 存储过程概述 1 mysql存储过程和存储函数是将复杂sql集合在一起 应用程序只需调用即可 不必关注mysql存储过程和存储函数sql逻辑 存储过程预先经过编译的一组sql 存储在 MySQL 服务器上 需要执行的时候 客户端只需要向
  • go 递归tree关系_统一的树可视化形式描述语法 – GoTree

    树可视化是可视化领域长期以来的研究热点 近40年来 研究者利用不同的视觉映射方式发展了超过300种树可视化形式 https treevis net 并且广泛应用在日常生活中 例如展示电脑文件目录结构的缩进列表 反映股市中公司市值以及股价升降
  • 【Linux】网络基础(二)

    TCP UDP协议 UDP 协议通信程序的编写 套接字相关接口介绍 字节序相关接口 IP 地址转换接口 TCP 协议通信程序的编写 套接字接口介绍 多进程实现多执行流 多线程实现多执行流 UDP 协议通信程序的编写 UDP 协议 无连接 不
  • THWATCH-01 陀螺仪 MPU6050 HAL库 正点原子 STM32驱动 计步

    THWATCH 01 陀螺仪 MPU6050 HAL库 正点原子 STM32驱动 计步 一级目录 二级目录 三级目录 一 cubemx配置 1 使用cubemx配置串口 2 配置IIC1 3 配置时钟和SWDIO下载口 二 修改KEIL工程
  • js冒泡排序两种方法(for循环、数组内置对象sort方法)

    一 利用for循环的嵌套来实现冒泡排序 冒泡排序 升序降序在于if条件中大于号和小于号 升序 var brr 8 68 6 88 86 666 99 98 var pemp 注意对循环体for的理解 自己顺一遍效果最佳 for var i
  • libuv初学者学习笔记

    开始阅读前 我简单的理解觉得是 类似于leetcode的一种题 外部同时启动开始 但是内部严格的按照线程1 gt 线程2的顺序发生过程 libuv框架 从上往下看 从左往右分成网络IO与文件IO等操作 网络I O看 linux平台通过底层e
  • js逆向之加密参数还原与模拟

    js逆向之加密参数还原与模拟 加密参数还原的逻辑很简单 找到代码中加密参数的生成过程 然后模拟出相同的方法 很多时候会卡到加密参数定位上 然后遇到混淆加密过的复杂Js 导致还原的过程无比艰辛 准备了由易到难的逆向案例 带大家体验精彩的逆向过
  • 【unity笔记】图解 Vector3.SignedAngle()方法的返回值

    这个方法可以理解为 两个向量之间的夹角 有符号的 我会将它想象成 将两个向量都放在坐标原点 一个向量要向哪个方向旋转多少度 才能与另一个向量重合 于是我在坐标原点放置了两个向量 OB和OA OB始终躺在X轴正方向 看看OA在4个象限的不同的
  • Pytorch——在一个Tensor中随机保留一个True,其他全为False

    需求 让一个 false false false false true true 的tensor 变成随机只保留一个true的tensor 且可以并行处理 要将一个布尔类型的张量 False False False False True T
  • 在vue中 echarts 饼图 legend 取消点击事件

    取消点击事件两种方法 legend selectedMode false 取消图例上的点击事件 myChart off legendselectchanged myChart on legendselectchanged function
  • 数学建模

    1 神经网络模型的基本概念是什么 神经网络模型模拟生物神经网络 通过大量互联节点来学习复杂的数据模式和关系 2 神经网络模型的主要优点是什么 可以自动学习时间序列数据的复杂非线性模式 不需要预先指定模型形式 具有很强的适应性和灵活性 3 神
  • WPF绘制图形

    利用WPF绘制简单图形 就像Winform那样 参考DrawToolsWPF using System using System Collections Generic using System Linq using System Text
  • 浏览器 hard refresh

    浏览器 hard referesh force refresh 不同于普通的按 F5 键刷新页面 它会先清当前页面的 cache 然后再刷新页面 这比手工找在浏览器设置中清当前站点的 cache 要方便的多 方法 Windows Ctrl
  • 【Java项目】多文件传输:文件分割与传输

    所谓的文件分割 并非真的将文件切割多个块存储发送 实质上是 用尺子和笔给整个文件块做上分割标记 那么发送时 文件的随机读写 可根据这些标记小块发送 接收端 也可以根据分割信息进行清点与组装 发送端与接收端只要约定好发送与接收 即传输协议 就
  • 算法可视化

    软件功能 以数组为例 一个数组是一个容器 对其进行可视化 主要针对数组的值查找 指定位置插入 指定位置删除进行可视化 软件针对每个数据结构可视化分两个方面 教学模式 主要针对数据结构每个方面进行讲解 可动画演示 实践模式 允许使用者自己通过