一个小圆使在其正八边形边上移动

一、题目

编制曲线轨迹动画程序

画一正八边形,如下图,再画一个小圆使在其正八边形边上移动。八边形的大小和小圆移动的速度由键盘输入。并将输入的数据送文件保存。按回车键程序结束。(功能延伸:改变数据文件的内容后,再根据数据文件里的数据绘制正八边形)

二、问题描述:本程序中要求一个小圆在正八边形上运动,其中小圆的速率和正八边形的大小可以自己确定。本系统完成以下几方面的功能: (1) 画出正八边形和小圆。

(2) 从键盘里输入正八边形外接圆的半径长和小圆在正八边形上的速率。 (3) 显示小圆在正八边形上运动。

(4) 存盘,将信息写入文件中”b:\\canshu_list”

(5) 再次从文件中直接读出程序,显示小圆在正八边形上运动。

三、系统设计说明 (一)系统功能分析:

1、程序设计一般由两部分组成:算法和数据结构,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性。在曲线轨迹动画程序中,除了改变八边形的大小和速率,保存外,更多的是情况查询,所以用静态数组保存数据,实现查询。 主要包括如下:

#include

#include

定义,正对不同驱动子程序的各种颜色值,及函数用到的一些特殊结构

*/

#include

#include /*一些常用的子程序,转换子程序,收索,排序子程序等

*/

#include /*定义和说明MSDOS和8086调用的一些常量和函数*/ #include /*数学计算*/

#define PI 3.14159265/*用指定的标示符PI来代替“3.1415926”这个字符

串*/

#define PNUM 8/*用指定的标示符PNUM来代替“8”这个字符*/ struct canshu /*定义结构体画图所需要的参数*/

2、main()主函数

控制数据算法和图形运动两部分。控制功能的实现通过循环执行,确定八边形的八个顶点和小圆的圆心,并不断地实现画图,已达到小圆在正八边形上运动。

3、initgr()

系统初始化

4、line()画直线函数

在指定两点简化一条直线。

5、printf()输出函数

直接利用输出函数printf输出字符串,在屏幕上显示提示输出选项。

6、circle()画圆函数

在指定圆心和半径的基础上画一个圆。

7、setcolor()

在指定的位置设置预定义的颜色。

8、save()文件写入函数。

前面讲到的数据输入和输出是以中端为对象的,当程序关闭后,数据也丢失了,所以为了能随时查阅数据,必须将数据输出到磁盘文件上保存起来,使用时再从磁盘中读入到内存中,这就用到了磁盘文件的读写操作。

(二)系统包括的功能模块,模块功能描述,各模块的层次结构结构(既相互调用关系)以及模块间的信息交换问题。 1、本程序是一个简单的曲线轨迹动画程序。

2、本程序实现的简单的如下功能:画一个正八边形,再画一个小圆在上面移动,正八边形的大小又键盘输出,再将其数据保存在文件中,打开文件,调用其程序,退出。

3、创建曲线轨迹动画包括创建一个正八边形、一个小圆、综合操作使小圆在正八边形上运动。 (三)算法设计

1、确定正八边形外接圆的圆心。

2、确定正八边形的八个顶点,其中第一个点与第八个点重合。 3、顺序连接个点画出正八边形。 4、确定小圆的圆心。

5、小圆的圆心与正八边形的第一个顶点重合。

6、结合4和5不断地画正八边形,已实现小圆在正八边形上运动。

7、按y键,输入自己选择的正八边形的边长,和小圆在正八边形上运动的速率。 8、再按任何的其他键,直接显示程序的效果。 (四)结束语

当编译连接都正确时,进行运行:在键盘里输入y,回车,再输入正八边形的外接圆的半径l和小圆在正八边形上运行的速率v,小圆就以一定速率在一定的正八边形上运动。按回车键结束。再次运行,按任何键,回车,显示结果将按照上次输入的数据进行,回车键结束。通过《计算机程序设计》课程后,进行的一次全面的综合性上机实验。为我们提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼我们的分析解决实际问题的能力。提高我们适应实际,实践编程的能力

四、数据流程图

五、程序源代码

#include

#include

正对不同驱动子程序的各种颜色值,及函数用到的一些特殊结构*/

#include

#include /*一些常用的子程序,转换子程序,收索,排序子程序等*/ #include /*定义和说明MSDOS和8086调用的一些常量和函数*/ #include /*数学计算*/

#define PI 3.14159265/*用指定的标示符PI来代替“3.1415926”这个字符串*/ #define PNUM 8/*用指定的标示符PNUM来代替“8”这个字符*/ struct canshu /*定义结构体画图所需要的参数*/ {

int l;int v; }canshu; struct POINT {

int x; int y; }p[PNUM+1];

void initgr(void) /*程序初始化*/ {int gd=DETECT,gm=0;

initgraph(&gd,&gm,

main() {

int i,j,k,cx,cy,bx,by;

int l,v;/*定义变量的基本结构类型*/

FILE *fp;/*定义fp是指向文件的指针*/ void save();

printf(

{

printf(

fp=fopen(

fread(&canshu,sizeof(struct canshu),1,fp); l=canshu.l;v=canshu.v; fclose(fp); }

cx=200;/*正八边形外接圆的圆心*/ cy=200; initgr();

for(i=0; i

p[i].x = l*cos(PI/PNUM+i*PI/(PNUM/2)) + cx;/*确定正八边 p[i].y = cy - l*sin(PI/PNUM+i*PI/(PNUM/2));每个顶点的坐标*/ }

p[PNUM].x = p[0].x;/*正八边形的最后一个顶点与第一个顶点重合*/ p[PNUM].y = p[0].y;

for(;!kbhit();) {

bx = p[0].x;/*保证小圆的圆心与正八边形的第一个点重合,不断的 by = p[0].y; 画图,以实现小圆在正八边形上运动的动画*/

for(i=0; !kbhit() && i

for(j=0; !kbhit() && j

for(k=0; k

setcolor(BLACK);/*背景颜色设为黑色*/ circle(bx, by, 5);/*小圆的圆心和半径*/

setcolor(WHITE);/*小圆盒正八边形的颜色设为白色*/

for(k=0; k

line(p[k].x, p[k].y, p[k+1].x, p[k+1].y); /*在两点之间画一条直线*/

bx = p[i].x + j*(p[i+1].x-p[i].x)/(2*l*sin(PI/PNUM)); by = p[i].y + j*(p[i+1].y-p[i].y)/(2*l*sin(PI/PNUM)); /*确定小圆的圆心*/ circle(bx, by, 5);

}

}

} }

void save() { FILE *fp; if((fp=fopen(

}

if(fwrite(&canshu,sizeof(struct canshu),1,fp)!=1) printf(

自己做

#include

#define PI 3.14159265 #define PNUM 8

#define EGAVGA_driver struct POINT {

int x;

int y; }p[PNUM+1];

void initgr(void)

{int gd=DETECT,gm=0;

initgraph(&gd,&gm,

main() {

int i,j,k,cx,cy,bx,by; int l,v; FILE *fp;

cx=200; cy=200;

fp = fopen(

l=100; v=10; } else {

printf(

fprintf(fp,

initgr();

for(i=0; i

p[i].x = l*cos(PI/PNUM+i*PI/(PNUM/2)) + cx; p[i].y = cy - l*sin(PI/PNUM+i*PI/(PNUM/2)); }

p[PNUM].x = p[0].x; p[PNUM].y = p[0].y;

for(;!kbhit();)

{

bx = p[0].x; by = p[0].y;

for(i=0; !kbhit() && i

for(j=0; !kbhit() && j

for(k=0; k

}

} }

delay(30); setcolor(BLACK); circle(bx, by, 5); setcolor(WHITE); for(k=0; k

line(p[k].x, p[k].y, p[k+1].x, p[k+1].y); bx = p[i].x + j*(p[i+1].x-p[i].x)/(2*l*sin(PI/PNUM)); by = p[i].y + j*(p[i+1].y-p[i].y)/(2*l*sin(PI/PNUM)); circle(bx, by, 5); }

一、题目

编制曲线轨迹动画程序

画一正八边形,如下图,再画一个小圆使在其正八边形边上移动。八边形的大小和小圆移动的速度由键盘输入。并将输入的数据送文件保存。按回车键程序结束。(功能延伸:改变数据文件的内容后,再根据数据文件里的数据绘制正八边形)

二、问题描述:本程序中要求一个小圆在正八边形上运动,其中小圆的速率和正八边形的大小可以自己确定。本系统完成以下几方面的功能: (1) 画出正八边形和小圆。

(2) 从键盘里输入正八边形外接圆的半径长和小圆在正八边形上的速率。 (3) 显示小圆在正八边形上运动。

(4) 存盘,将信息写入文件中”b:\\canshu_list”

(5) 再次从文件中直接读出程序,显示小圆在正八边形上运动。

三、系统设计说明 (一)系统功能分析:

1、程序设计一般由两部分组成:算法和数据结构,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性。在曲线轨迹动画程序中,除了改变八边形的大小和速率,保存外,更多的是情况查询,所以用静态数组保存数据,实现查询。 主要包括如下:

#include

#include

定义,正对不同驱动子程序的各种颜色值,及函数用到的一些特殊结构

*/

#include

#include /*一些常用的子程序,转换子程序,收索,排序子程序等

*/

#include /*定义和说明MSDOS和8086调用的一些常量和函数*/ #include /*数学计算*/

#define PI 3.14159265/*用指定的标示符PI来代替“3.1415926”这个字符

串*/

#define PNUM 8/*用指定的标示符PNUM来代替“8”这个字符*/ struct canshu /*定义结构体画图所需要的参数*/

2、main()主函数

控制数据算法和图形运动两部分。控制功能的实现通过循环执行,确定八边形的八个顶点和小圆的圆心,并不断地实现画图,已达到小圆在正八边形上运动。

3、initgr()

系统初始化

4、line()画直线函数

在指定两点简化一条直线。

5、printf()输出函数

直接利用输出函数printf输出字符串,在屏幕上显示提示输出选项。

6、circle()画圆函数

在指定圆心和半径的基础上画一个圆。

7、setcolor()

在指定的位置设置预定义的颜色。

8、save()文件写入函数。

前面讲到的数据输入和输出是以中端为对象的,当程序关闭后,数据也丢失了,所以为了能随时查阅数据,必须将数据输出到磁盘文件上保存起来,使用时再从磁盘中读入到内存中,这就用到了磁盘文件的读写操作。

(二)系统包括的功能模块,模块功能描述,各模块的层次结构结构(既相互调用关系)以及模块间的信息交换问题。 1、本程序是一个简单的曲线轨迹动画程序。

2、本程序实现的简单的如下功能:画一个正八边形,再画一个小圆在上面移动,正八边形的大小又键盘输出,再将其数据保存在文件中,打开文件,调用其程序,退出。

3、创建曲线轨迹动画包括创建一个正八边形、一个小圆、综合操作使小圆在正八边形上运动。 (三)算法设计

1、确定正八边形外接圆的圆心。

2、确定正八边形的八个顶点,其中第一个点与第八个点重合。 3、顺序连接个点画出正八边形。 4、确定小圆的圆心。

5、小圆的圆心与正八边形的第一个顶点重合。

6、结合4和5不断地画正八边形,已实现小圆在正八边形上运动。

7、按y键,输入自己选择的正八边形的边长,和小圆在正八边形上运动的速率。 8、再按任何的其他键,直接显示程序的效果。 (四)结束语

当编译连接都正确时,进行运行:在键盘里输入y,回车,再输入正八边形的外接圆的半径l和小圆在正八边形上运行的速率v,小圆就以一定速率在一定的正八边形上运动。按回车键结束。再次运行,按任何键,回车,显示结果将按照上次输入的数据进行,回车键结束。通过《计算机程序设计》课程后,进行的一次全面的综合性上机实验。为我们提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼我们的分析解决实际问题的能力。提高我们适应实际,实践编程的能力

四、数据流程图

五、程序源代码

#include

#include

正对不同驱动子程序的各种颜色值,及函数用到的一些特殊结构*/

#include

#include /*一些常用的子程序,转换子程序,收索,排序子程序等*/ #include /*定义和说明MSDOS和8086调用的一些常量和函数*/ #include /*数学计算*/

#define PI 3.14159265/*用指定的标示符PI来代替“3.1415926”这个字符串*/ #define PNUM 8/*用指定的标示符PNUM来代替“8”这个字符*/ struct canshu /*定义结构体画图所需要的参数*/ {

int l;int v; }canshu; struct POINT {

int x; int y; }p[PNUM+1];

void initgr(void) /*程序初始化*/ {int gd=DETECT,gm=0;

initgraph(&gd,&gm,

main() {

int i,j,k,cx,cy,bx,by;

int l,v;/*定义变量的基本结构类型*/

FILE *fp;/*定义fp是指向文件的指针*/ void save();

printf(

{

printf(

fp=fopen(

fread(&canshu,sizeof(struct canshu),1,fp); l=canshu.l;v=canshu.v; fclose(fp); }

cx=200;/*正八边形外接圆的圆心*/ cy=200; initgr();

for(i=0; i

p[i].x = l*cos(PI/PNUM+i*PI/(PNUM/2)) + cx;/*确定正八边 p[i].y = cy - l*sin(PI/PNUM+i*PI/(PNUM/2));每个顶点的坐标*/ }

p[PNUM].x = p[0].x;/*正八边形的最后一个顶点与第一个顶点重合*/ p[PNUM].y = p[0].y;

for(;!kbhit();) {

bx = p[0].x;/*保证小圆的圆心与正八边形的第一个点重合,不断的 by = p[0].y; 画图,以实现小圆在正八边形上运动的动画*/

for(i=0; !kbhit() && i

for(j=0; !kbhit() && j

for(k=0; k

setcolor(BLACK);/*背景颜色设为黑色*/ circle(bx, by, 5);/*小圆的圆心和半径*/

setcolor(WHITE);/*小圆盒正八边形的颜色设为白色*/

for(k=0; k

line(p[k].x, p[k].y, p[k+1].x, p[k+1].y); /*在两点之间画一条直线*/

bx = p[i].x + j*(p[i+1].x-p[i].x)/(2*l*sin(PI/PNUM)); by = p[i].y + j*(p[i+1].y-p[i].y)/(2*l*sin(PI/PNUM)); /*确定小圆的圆心*/ circle(bx, by, 5);

}

}

} }

void save() { FILE *fp; if((fp=fopen(

}

if(fwrite(&canshu,sizeof(struct canshu),1,fp)!=1) printf(

自己做

#include

#define PI 3.14159265 #define PNUM 8

#define EGAVGA_driver struct POINT {

int x;

int y; }p[PNUM+1];

void initgr(void)

{int gd=DETECT,gm=0;

initgraph(&gd,&gm,

main() {

int i,j,k,cx,cy,bx,by; int l,v; FILE *fp;

cx=200; cy=200;

fp = fopen(

l=100; v=10; } else {

printf(

fprintf(fp,

initgr();

for(i=0; i

p[i].x = l*cos(PI/PNUM+i*PI/(PNUM/2)) + cx; p[i].y = cy - l*sin(PI/PNUM+i*PI/(PNUM/2)); }

p[PNUM].x = p[0].x; p[PNUM].y = p[0].y;

for(;!kbhit();)

{

bx = p[0].x; by = p[0].y;

for(i=0; !kbhit() && i

for(j=0; !kbhit() && j

for(k=0; k

}

} }

delay(30); setcolor(BLACK); circle(bx, by, 5); setcolor(WHITE); for(k=0; k

line(p[k].x, p[k].y, p[k+1].x, p[k+1].y); bx = p[i].x + j*(p[i+1].x-p[i].x)/(2*l*sin(PI/PNUM)); by = p[i].y + j*(p[i+1].y-p[i].y)/(2*l*sin(PI/PNUM)); circle(bx, by, 5); }


相关内容

  • 小学五六年级面积计算
  • 面积计算 知识要点:计算平面图形的面积时,要通过观察.分析,借助图形的特征,适当添加辅助线,运用图形的平移.旋转.割补等方法,对图形进行合理的等积变形,从而寻找出正确的解题途径. 例题1四边形ABCD 的对角线BD 被E .F 两点三等分,且四边形AECF 形ABCD 的面积. 变式练习:1. 四边 ...

  • 与圆有关的解答题(答案)
  • , 则BC=________. (第1题) (第2题) (第3题) 2.(乌兰察布)如图,A,B,C是⊙O上三点,∠AOB=50°,∠OBC=40•°,则∠OAC为( ) A.10° B.15 ° C.20° D.35° 4.(贺州)如图,直线AB,CD相交于点O,∠AOC=30°,半径为1cm的⊙ ...

  • 九年级上册限时作业
  • 第一章平行四边形性质(第1-2课时) 限时作业(1-2) 1.在 中 (1)若 度:(2)若 ,则 ,则 度, 度, 度, 度: (3)若 ,则 度, 度. 2.则 , 中,周长为 . ,△ 的周长比△ 周长多 3. 中, 的平分线分 为长是 和 的两线段则 的周长是___________cm. 4 ...

  • 初一规律题库(2)
  • 找 规 律 1. 2. (09东城一摸)12.按一定规律排列的一列数依次为:--,按 此规律排列下去,这列数中的第9个数是 . 3. (09台州)16.将正整数1,2,3,„从小到大按下面规律排列.若第4行第2列的数 为32,则①n :②第i行第j列的数为 (用i,j表示). 111111 231 ...

  • 初二练习册
  • 第三章 图形的平移与旋转 §3.1生活中的平移 一.学习重难点 重点: 平移的性质和应用 难点: 探究平移的条件 二.知识点梳理 1.平移的概念: 2平移的性质 三.典型例题 典型题一 平移的识别 [例1]下列运动中属于平移的是( ) A.冷水加热过程中小气泡上升为大气泡 B.随手抛掷彩球的运动 C ...

  • 九年级(上)[圆]-同步练习及答案
  • 学习要求: 理解圆的定义,理解弦.直径.圆弧.半圆.优弧.劣弧等有关概念. 做一做: 填空题: 1.确定一个圆的要素是______和______. 2.平面上,与已知点P 的距离为3cm 的所有点组成的图形是______. 3.A .B 是⊙O 上不同的两点,⊙O 的半径为r ,则弦AB 长的取值范 ...

  • 八年级数学试卷及答案
  • 八年级数学试卷及答案 一.选择题(本题8小题,每小题3分,满分24分)下列各小题均有四个选项,其中只有一个是正确的 1.下面四个标志分别代表:回收.绿色包装.节水.低碳,其中中心对称图形的是( ) 2.已知a <b ,则下列不等式一定成立的是( ) A. a+3>b+3 B. 2a> ...

  • 第三讲 数阵图
  • 第三讲 数阵图 一.知识点: 一些数按照一定的规则,填在某一特定图形的规定位置上,这种图形,我们称它为"数阵图",数阵图的种类繁多,绚丽多彩,这里只向大家介绍三种数阵图,即封闭型数阵图.辐射型数阵图和复合型数阵图.在解答这类问题时,要善于确定所求的和与关键数字间的关系式,用试验的 ...

  • 八年级数学四边形动点问题练习
  • 中考数学动点专题 所谓"动点型问题"是指题设图形中存在一个或多个动点,它们在线段.射线或弧线上运动的一类开放性题目.解决这类问题的关键是动中求静,灵活运用有关数学知识解决问题. 关键:动中求静. 数学思想:分类思想 函数思想 方程思想 数形结合思想 转化思想 注重对几何图形运动变 ...