强化训练.docx
- 文档编号:14808081
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:10
- 大小:179.82KB
强化训练.docx
《强化训练.docx》由会员分享,可在线阅读,更多相关《强化训练.docx(10页珍藏版)》请在冰点文库上搜索。
强化训练
学号:
0121110680518
课程设计
(基础强化训练)
题目
Geometricaldreams
学院
计算机科学与技术学院
专业
软件工程
班级
ZY1102
姓名
叶霖
指导教师
鄢红国
2013
年
7
月
12
日
课程设计任务书
学生姓名:
叶霖专业班级:
软工ZY1102
指导教师:
鄢红国工作单位:
计算机学院
题目:
Geometricaldreams
初始条件:
输入:
第一行输入包含一个整数n,接下来的n行包含对实数的坐标点Mi。
最后n行文件包含度的角度αi值。
输出:
输出文件应包含n行双坐标的点。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1、完成算法分析;
2、给出对应的程序流程图;
3、给出能正确实现的程序源码;
5、给出试算截屏图;
6、课程设计工作的分析与总结;
7、给出不少于5篇参考文献。
时间安排:
2013-7-8到2013-7-12
消化资料、系统调查、形式描述1天
系统分析、总体设计、实施计划3天
撰写课程设计报告书1天
指导教师签名:
2013年7月8日
系主任(或责任教师)签名:
2013年7月8日
目录
1注册资料1
2选题描述1
3算法分析2
3.1复数平面向量旋转2
3.2判断An+1和A1是否相等2
4程序流程图3
5程序源码4
6试算截屏图5
7分析与总结6
8参考文献6
Geometricaldreams
1注册资料
用户名:
735466897
密码:
123456
选题题号:
2600
2选题描述
有一个多边形A1A2…An一个(顶点Ai屈指可数的顺时针顺序)。
两边AiAi+1一个等腰三角形AiMiAi+1是建立在外侧的多边形,和角AiMiAi+1=αi。
这里An+1=A1。
设置的角度满足一个条件,人工智能的总和在它的任何角度的非空的子集不被360度整除。
你得到n<=50,顶点坐标Mi和角度αi(以度)。
编写一个程序,恢复的多边形顶点坐标。
输入:
第一行输入包含一个整数n,接下来的n行包含对实数的坐标点Mi。
最后n行文件包含度的角度αi值。
输出:
输出文件应包含n行双坐标的点。
样例输入:
3
02
33
20
90
90
90
样例输出:
11
13
31
3算法分析
3.1复数平面向量旋转
本题中,已知Mi和角度αi需要确定多边形顶点坐标,该代码采用的思想是先初始化A1点(这里设其横纵坐标初始值均为0),通过复数平面向量旋转的算法来求得其下一个点A2的坐标,再由A2来求得A3的坐标,以此类推,即可求出An+1的坐标。
这里给出的核心代码就是求某点下一点的坐标的算法:
Pointgetnp(Pointori,Pointcen,doubleangle)//向量cen->ori绕cen旋转逆时针旋转angle弧度
{
//复数平面向量旋转
Pointv;
v.x=ori.x-cen.x;
v.y=ori.y-cen.y;
Pointres;
res.x=v.x*cos(angle)-v.y*sin(angle)+cen.x;
res.y=v.x*sin(angle)+v.y*cos(angle)+cen.y;
returnres;
}
3.2判断An+1和A1是否相等
先预定义一个精度:
constdoubleeps=1e-6;//最终精度
通过判断An+1和A1是否相等,这里通过判断An+1和A1两横纵坐标之差的绝对值是否都小于eps,若都小于则认为两点为同一点;若不相等,则取两点的中点作为A1点并再次求出An+1并再次比较,直到上述条件满足即可跳出循环。
具体代码如下:
while
(1){
for(i=1;i<=n;i++){
a[i]=getnp(a[i-1],p[i-1],angle[i-1]);
}
if(fabs(a[n].x-a[0].x)<=eps&&fabs(a[n].y-a[0].y)<=eps)break;
else{
a[0].x=(a[0].x+a[n].x)/2;
a[0].y=(a[0].y+a[n].y)/2;
}
}
4程序流程图
5程序源码
#include
#include
constdoubleeps=1e-6;//确定最终精度
constdoublepi=acos(-1.0);
structPoint
{
doublex,y;
}p[50],a[50];
doubleangle[50];
Pointgetnp(Pointori,Pointcen,doubleangle)//向量cen->ori绕cen旋转逆时针旋转angle弧度
{
//复数平面向量旋转
Pointv;
v.x=ori.x-cen.x;
v.y=ori.y-cen.y;
Pointres;
res.x=v.x*cos(angle)-v.y*sin(angle)+cen.x;
res.y=v.x*sin(angle)+v.y*cos(angle)+cen.y;
returnres;
}
intmain()
{
intn,i;
while(scanf("%d",&n)!
=EOF){
for(i=0;i scanf("%lf%lf",&p[i].x,&p[i].y); } for(i=0;i scanf("%lf",&angle[i]); angle[i]=angle[i]*pi/180; } a[0].x=0; a[0].y=0;//A1赋初值 while (1){ for(i=1;i<=n;i++){ a[i]=getnp(a[i-1],p[i-1],angle[i-1]); } if(fabs(a[n].x-a[0].x)<=eps&&fabs(a[n].y-a[0].y)<=eps)break; else{ a[0].x=(a[0].x+a[n].x)/2; a[0].y=(a[0].y+a[n].y)/2; } } for(i=0;i printf("%.0lf%.0lf\n",a[i].x,a[i].y); } } return0; } 6试算截屏图 7分析与总结 该算法采用复数平面向量旋转的思想。 本题中通过A1和输入的值求出A2,再用A2求A3,通过n次循环即可求出An+1,再将A1与An+1进行比较,若不相等则取两点的中点再进行上述计算,直到两点相等为止。 此思想清晰易懂,实现代码相对简单,且满足题目要求。 8参考文献 [1]李文新、郭炜、余华山.程序设计导引及在线实践[M].北京: 清华大学出版社 [2]谭浩强.C程序设计[M].北京: 清华大学出版社,2005. [3]严蔚敏,吴伟民.数据结构[M].北京: 清华大学出版社,1996. [4]钟珞.计算机科学导论[M].武汉: 武汉理工大学出版社. [5]张富.C及C++程序设计[M].北京: 人民邮电出版社. 本科生课程设计成绩评定表 班级: 软工ZY1102 姓名: 叶霖 学号: 0121110680518 序号 评分项目 满分 实得分 1 学习态度认真、遵守纪律 10 2 设计分析合理性 10 3 设计方案正确性、可行性、创造性 20 4 设计结果正确性 40 5 设计报告的规范性 10 6 设计验收 10 总得分/等级 评语: 注: 最终成绩以五级分制记。 优(90-100分)、良(80-89分)、中(70-79分)、 及格(60-69分)、60分以下为不及格 指导教师签名: 2013年7月12日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 强化 训练