1、 课程设计任务书课程设计任务书 学 院 信息科学与工程学院 专 业 计算机科学与技术 学生姓名 班级学号 课程设计题目 矩阵的旋转反射 实践教学要求与任务实践教学要求与任务: : 输入矩阵的行列,选择旋转方式,输出旋转后的矩阵。 (1)绕 X 轴旋转; (2)绕 Y 轴旋转; (3)绕原点旋转。 工作计划与进度安排工作计划与进度安排: : 第 17 周 星期一:设计任务分析和总体设计 星期二:软件算法和流程设计 星期三、四、五:软件编码实现 第 18 周 周一:软件总体调试 周二:软件运行分析 周三:答辩、验收程序 周四:答辩、验收程序 周五:书写课程设计报告,提交 指导教师: 201 年 月
2、 日 专业负责人: 201 年 月 日 学院教学副院长: 201 年 月 日 目目 录录 1 题目内容及设计要求 1 2 总体设计 .1 2.1 总体功能框图 . 1 2.2 类的设计说明 . 1 2.3 主要算法流程图. 2 3 程序清单及注释 .2 4 运行结果与分析 .6 5 总结 9 6 参考文献 . 10 1 题目内容及设计要求题目内容及设计要求 输入矩阵的行列,选择旋转方式,输出旋转后的矩阵。 (1)绕 X 轴旋转; (2)绕 Y 轴旋转; (3)绕原点旋转。 2 总体设计总体设计 2.1 2.1 总体功能框图总体功能框图 题目的简洁给编程者提供了很大的发挥空间,实际上,从接手此题
3、的刚开始,编程者就将 目光放在了二维数组上,因为用二维数组作为矩阵的载体再好不过了,通过修改数组的元 素的下标就可以实现对元素的操作即旋转反射。 框图:框图: 2.2 2.2 类的设计说明类的设计说明 实现矩阵的旋转反射实现矩阵的旋转反射 绕绕 X X 轴轴 旋旋 转转 绕绕 原原 点点 旋旋 转转 绕绕 Y Y 轴轴 旋旋 转转 CMatrix -row:static int -line:line -Mat100100 -MatR100100 +InputFromKeyboard():void 2.3 2.3 主要算法流主要算法流程图程图 3、程序清单及注释、程序清单及注释 #include
4、 #include using namespace std; class CMatrix /定义矩阵类 static int row,line; /定义静态变量,接收数组的行与列 int Mat 100100; /定义三个二维数组 int MatR 100100; public: void InputFromKeyboard() /从键盘中输入矩阵 ReflectO() 原点旋转 输入选项 ReflectY() Y 轴旋转 Show1 输出原矩阵 case 2(输入函数) InputFromKeyboard() Show1 输出原矩阵 case 3(输入函数) InputFromKeyboar
5、d() Show1 输出原矩阵 ReflectX() X 轴旋转 Show2 输出旋转后矩阵 Show2 输出旋转后矩阵 case 1(输入函数) InputFromKeyboard() 开始 Show2 输出旋转后矩阵 结束 Switch (choice) coutrow; coutline; int i,j; if(row100) coutMat ij; void Show1() /输出函数,输出原函数 int i,j; for(i=0;ichoice; switch(choice) case 1: opp.InputFromKeyboard(); opp.ReflectX(); brea
6、k; case 2: opp.InputFromKeyboard(); opp.ReflectY(); break; case 3: opp.InputFromKeyboard(); opp.ReflectO(); break; case 4: break; 3 运行结果与分析运行结果与分析 图 4.1 操作选择界面 图 4.2 绕 x 轴旋转 图 4.3 绕 y 轴旋转 图 4.4 绕原点旋转 4 总结总结 此题思路并不难摸清,关键在于将解决问题的方法菜单化,逻辑化。在解决此问题的过程中主要有以下 几个困难: 1.输入函数中数组行列大小的输入保存以至于之后的引用 2.数组的输入及输出方式 3.从数学角度对矩阵的修改 其中,第一个问题是困扰我时间最长的,由于行变量 row 与列变量 line 需要由用户输入并在初始化后 保持不变,于是想到了用静态变量来解