当前位置:
文档之家› raptor程序设计案例教程-ch8
raptor程序设计案例教程-ch8
为了观察方便,只需要模拟将自然数1~N排 序的过程
解题思路
数据结构自然是采用数组,并且是数据为1 至N的随机数组
所以程序首先要生成一个N元的全排列。要 生成N元的全排列,需要N次生成随机数, 但是每一次都要与之前的不重复
可以使用另一个布尔型数组存储各个数是否被 使用过
解题思路
使用着色的方法可以让这个过程变得直观 ,所以可以给数据着色,然后在变更某个 数据的时候改变它的颜色,可以做出一种 不错的效果
那么如何确定子边的属性呢?
分析与设计思路
假设父边的阶数为level,边长为length,坐标为(x, y),方向为orientation
则子边的阶数显然是level-1,子边的边长则是 length÷3。
再看方向,①号边和④号边的方向与父边相同, 为orientation,②号边的方向为orientation+1,而 ③号边的方向为orientation-1
第8章 综合应用
《RAPTOR程序设计案例教程》
本章案例
科赫雪花的原理及简单绘制 可视化排序方法如何设计? 图形界面下如何输入无向图? 如何用RAPTOR设计画图程序?
科赫雪花的原理及简单绘制
将一条线段三等分,先以中 间的一段为底边作一个正三 角形,然后再去掉这个正三 角形的底边, 于是我们可以 得到一条由4条长度为原线段 长度三分之一的线段构成的 折线
一种较为方便的方法是使 用另一个一维数组used[i] 来表示数字i是否已经被 使用过
这样在生成第二个数的时 候,检查第二个数是否被 使用过,如果已经被使用 过了,那么就重新生成一 个新的随机数直到出现没 有使用过的为止
数组的排序-冒泡
Bubble_Sort子程序
数组的排序-插入
Insertion子程序
需要知道它的位置。用边的中点可以确定 它的位置,也就是图中的黑点。
边的长度定义为从图最左端到最右端的线 段长
分析与设计思路
边还有一个特性:方向。 定义基本图形 的方向为从左到右的向量与
水平线的夹角,则方向总共有6种
分析与设计思路
有了中点位置、方向、边长和阶数,就可 以确定一条边了
使用递归绘制曲线,只需要将绘制曲线分 解成4步,绘制4条子边即可。
排序数据的显示
一种显示方法就是使用纯色。背景使用蓝色,数 据条用红色,更新的数据条使用绿色。
首先是整体的窗口初始化。以20作为柱宽,每个 矩形都需要描边
当在排序过程中修改一个数据的值的时候,需要 做的事情有:先把这个数据条画出来,画成绿色 ,(先用蓝色底色覆盖原来的颜色,再画红色的 矩形并用黑色描边),并播放相应的声音(越大 的数据音调越高),然后等待一会儿,再将其重 新填充成红色
可视化的排序过程实例
图形界面的无向图输入
无向图是离散数学一个重要的 研究对象。所谓无向图,就是 对若干个点连接情况的描述。 图的基本元素是点与边
它并不关心这些点的位置关系 ,它只关心点与点的连接情况 ,即两个点之间是否有边
比如,右图中两个图是等价的。 因为它们的连接状况是一样的
图的储存
计算机只能以数组的形式来存 储数据,对于无向图这种几何 的东西,它可以以一种矩阵的 方式记录下来
当level=1时绘制线段即可 最后
要绘制一条完整的科赫雪花线,只需要绘制三 条边即可
三条边的中点到屏幕中心的距离一样,分别位 于π/4、11π/12、7π/12的方向
科赫雪花
Main子图
科赫雪花-drawline子程序
科赫雪花-绘制结果
排序的可视化
RAPTOR作为一个可视的程序设计框架,将 代码可视化、算法可视化,运行的环境也 是可视的。
所以可以说,设计与利用好子程序是模块 化的精髓
程序架构分析
正如解题思路中所说,首先我们需要一个 随机数组,并不是一个简单的由随机元素 组成的数据,而是1至N这N个数一个随机的 排列
接着我们需要有排序的算法,冒泡排序与 插入排序
然后是将数据显示在屏幕上的方法
或有改变数组某一个数据时图像更新的方法
生成随机数组
生成随机数组的过程其实是生成一个全排 列。所谓全排列,就是将1至N这N个自然数 排成一列
这样的排法总共有n!总排法。怎样从中随机 选出一种呢?自然想到需要使用随机数函 数Random
难点在于:排列的第1项与第2项是不能有 重复的。那么有没有什么办法可以避免重 复呢?
生成随机数组
假设有n个点,那么使用一个 n*n的矩阵,记为A,使用 A[i,j]=1来表示点i和点j有点相 连,A[i,j]=0来表示点i与点j没 有边相连
那么,同样作为程序重要组成部分的数据 结构,能否也进行可视化呢?
带着这种想法,我们尝试着设计一个可视 的方法,来用可视化的方法诠释一个最基 本的算法:排序
可视化排序的效果图
解题思路
排序的算法多种多样。设计一个可以显示 数据是如何移动和变化的程序。
使用柱状图可以很好地模拟数据的移动过 程。
排序过程中,每一次更改一个数据就得先 将它涂成背景色,再画成绿色,最后恢复 成红色。
为了使排序更有趣味性,还可以给它加上 声音。数字越大,声音最大的不同是:子程序对数 据是“封闭”的,它只接收、知晓与更改 它能获得的数据,因此子程序相对于子图 访问数据的条件更加苛刻,但是这保证了 子程序极佳的可移植性与可扩展性
分析与设计思路
计算中点坐标有些复杂。可以看出①号边 和④号边的中点坐标距父边length÷3,中 点与父边中点的连线方向分别为 orientation+ π和orientation
各边的中点坐标
科赫雪花画法递归基线条件
递归的原理就是将一条边分拆成三条子边 。基线条件即为阶为1。子边的属性的计算 见算法分析的部分
如果我们对构成这条折线的 每一条线段不断重复上述的 步骤,得到的曲线就 是所谓 的“科赫曲线”
分析与设计思路
边是一个雪花图案的基本单位,有不同的 阶数,下表为1~4阶的边
分析与设计思路
从另一种角度看,n阶的边可以看成由4条n1阶的边构成
科赫雪花边的中点
分析与设计思路
怎样确定一条边呢?首先当然要知道它的 阶数