当前位置:首页 >> IT/计算机 >>

C语言课设 编制曲线轨迹动画程序 完整版

沈阳理工大学 学生姓名: 班级: 学号: 设计题目:编制曲线轨迹动画程序 一、设计要求: 设计要求:

学院

计算机程序训练任务书

画一正八边形,如下图,再画一个小圆使在其正八边形边上 移动。八边形的大小和小圆移动的速度由键盘输入。并将输入的 数据送文件保存。按回车键程序结束。 二、设计报告: 设计报告: 题目内容描述: 上机编写程序,先确定坐标原点,然后确定八边形的顶点,画八边形与小圆 的初始位置,运用循环结构使小圆运动,八边形的大小和小圆移动的速度由键盘 输入。并将输入的数据送文件保存。按回车键程序结束。 三、系统设计说明 (一)系统功能分析:

1.应用程序功能说明:
先确定原点(200,200) ,再打开一个文件,如果文件不可写入,则规定八边 形的边长为 100,小圆移动速度为 10,若能写入,则从键盘输入八边形的边长及 小 圆 移 动 的 速 度 , 并 把 输 入 的 数 据 存 入 文 件 保 存 , 再 根 据

p[i].x=l*cos(PI/PNUM+i*PI/(PNUM/2))+cx, p[i].y=cy-l*sin(PI/PNUM+i*PI/(PNUM/2)),确定八边形的顶点,再运用画线
函数 line 画出八边形,并画出小圆的初始位置,运用循环结构使小圆运动。运 行程序,输入八边形边长及小圆速度,按回车键运行,出现所需运行结果,按退 出键退出程序。

2.输入数据类型及格式:
程序设计一般由两部分组成:算法和数据结构,合理地选择和实现一个数据 结构和处理这些数据结构具有同样的重要性。八边形的边长不要过大,长度过大 会造成八边形在屏幕上显示不完整,一般长度小于 210 就可以,小圆的速度可以 大一些,但也不宜过大,因为大于某一数值后,小圆的速度也不会再增大。 数据类型主要包括如下:

#include "Conio.h" #include "graphics.h" #include <stdio.h> #include <stdlib.h> #include <dos.h> #include <math.h> #define PI 3.14159265 #define PNUM 8 #define EGAVGA_driver struct POINT { int x; int y; }p[PNUM+1];

/*字符模函数及图形模函数*/ /*线条图形函数*/ /*输入输出函数*/ /*动态分配储存空间函数*/ /*调用函数*/ /*数学函数*/ /*宏定义 PI 值为 3.14159265*/ /*对 PNUM 的宏定义,起值为 8*/ /*宏定义变量*/ /*定义结构图变量名称为 POINT*/

/*定义结构体变量包涵的整形变量 x*/ /*定义结构体变量包涵的整形变量 y*/ /*定义一式的结构*/

conio.h:conio.h 不是 C 标准库中的头文件。conio 是 Console Input/Output
(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和 数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如

getch()函数等等。 graphics.h:图形处理头文件。 stdlib.h:stdlib 头文件即 standard library 标准库头文件,stdlib 头文件里包
含了 C、C++语言的最常用的系统函数,stdlib.h 里面定义了五种类 型、一些宏、通用工具函数和文件。

dos.h:这是一个头文件,里面包含了很多 BIOS 和 DOS 调用函数。 setcolor:C 库函数,图形屏幕函数。功能:将当前图形屏幕的当前笔画颜色置
为 color。函数原型:void setcolor(int color)。

main()主函数
程序先定义原点,根据指定函数确定八边行定点,用画线函数画出一个八边 形,并以八边形的一个顶点为圆心做一个小圆使小圆圆心在八边形上移动。将输 入的八边形的大小和小圆移动的速度送入文件中保存,按回车键程序结束。

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

fprintf()输出文件
利用函数直接将数组中的内容输送到文件中。

! kbhit()
检测从键盘输入的值,没有输入返回值为零。有输入返回键值。

line() 画线函数:函数 line()使用当前绘图色、线型及线宽,在给定的两点间画
一直线。该函数调用方式为 void line(int startx,int starty,int

endx,int endy); 参数 startx,starty 为起点坐标,endx,endy
为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可 见)当前位置不改变。此函数相应的头文件为 graphics.h。

circle()画圆函数:函数 circle()使用当前绘图色并以实线画一个完整的圆。该函
数调用方式为 void circle(int x,int y,int radius)。 参数 x,y 为圆心坐标,radius 为圆半径,用像素个素表示。注意,调用

circle() 函数画圆时不用当前线型。此函数对应的头文件为 graphics.h。 3.算法描述:
要在屏幕上输出正八边形,可选取程序输出对话框的(200,200)像素点为 坐标原点做出 x、y 轴。若设正八边形的外接圆半径为 l,圆周率为 PI,那么正八 边形的各个顶点在上述坐标轴的 x 坐标可表示为 l*cos(PI/8 + i*PI/4)。其中 i 为 0~7 的正整数。同理,各个顶点的 y 坐标可表示为 l*sin(PI/8 + i*PI/4)。其 中 i 为 0~7 的正整数。利用 graphics 头文件下的 line 函数连接各点即可画出正 八边形。 而要实现一个小圆在正八边形上移动, 可参考动画制作的 “定格” 手法: 画出每个位置的图形,再按顺序和一定的时间间隔输出到屏幕。时间间隔在人眼 的视觉暂留时间之内,可以看成是图形的连续动作。而在 C 语言中,一个窗口 画出的图形是不会消失的。 解决这个问题的方法是: 先用白色画出某个位置的圆, 在画下一个位置的圆时,用与屏幕相同的颜色(黑色)画上一个位置的圆。即相 当于将上一个圆填成与屏幕相同的颜色。那上一个圆就消失了,再用白色画出这 个位置的圆。就画出了两个位置的图形。以此类推,将此算法按由输入的速度折 算成的时间间隔循环每个边长占的像素点次,就实现了小圆在正八边形上的运 动。

流程图如下: 输入外接圆半径 l 和移动速度 v 定义坐标原点(200,200) 定义八边形顶点 x 坐标:

p[i].x= l*cos(PI/PNUM+i*PI/(PNUM/2)) + 200
定义八边形顶点 y 坐标:

p[i].y=200-l*sin(PI/PNUM+i*PI/(PNUM/2)) i=0,每次循环自增一,直到 i<8
定义圆心 x 坐标 bx = p[0].x 定义圆心 y 坐标 by = p[0].y 延迟 30 毫秒

k=0,每次循环自增一,直到 k<1000/v
画黑色的圆,圆心为(bx,by) ,半径为 5 设定画线颜色为白色 用 line 函数连接八边形两顶点:

(p[k].x,p[k].y,p[k+1].x,p[k+1].y) k=0,每次循环自增一,直到 k<8
定义圆心坐标画圆

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) j=0,每次循环自增一,直到 j<2*l*sin(PI/8) i=0,每次循环自增一,直到 i<8

四、结束语: 结束语:

这次计算机程序训练给了我一个亲身实践的机会, 运用自己所学到的知识和 查阅一些资料使自己成功的完成了这次训练,而且通过查阅各种资料,也让我学 到了许多课本上老师没有讲过的知识,增加了自己的知识面,在实践中学到了许 多,使我再次感觉到了计算机程序设计的功能之大,同时锻炼我的分析解决实际 问题的能力,对以后的程序训练有了经验与信心,也使我对自己的未来有了新的 打算,有了多一条通路,学好计算机程序设计,就可以从事这方面的工作,给自 己多了一个机会, 多了一个砝码, 也使我更有动力去更深入的学习研究这门课程, 虽然这门课结了,但我的学习是不会结束的。总之,在这次独立完成设计的过程 中我受益很多。

五、程序源码: 程序源码:
#include "Conio.h" #include "graphics.h" #include <stdio.h> #include <stdlib.h> #include <dos.h> #include <math.h> #define PI 3.14159265 #define PNUM 8 #define EGAVGA_driver struct POINT { int x; int y; }p[PNUM+1]; void initgr(void) /*定义结构体变量包涵的整形变量 x*/ /*定义结构体变量包涵的整形变量 y*/ /*定义一式的结构*/ /*主函数定义*/ /*字符模函数及图形模函数*/ /*线条图形函数*/ /*输入输出函数*/ /*动态分配储存空间函数*/ /*调用函数*/ /*数学函数*/ /*对 PI 的宏定义,其值为 3.14159265*/ /*对 PNUM 的宏定义,起值为 8*/ /*宏定义变量*/ /*定义结构体变量名称为 POINT*/

{ int gd=DETECT,gm=0; initgraph(&gd,&gm,""); } main() { int i,j,k,cx,cy,bx,by; int l,v; FILE *fp; /*定义 7 个整型变量*/ /*定义两个整型变量*/ /*声明 fp 是指针,用来指向 FILE 类型的对象*/ /*主函数*/ /*给两个整形变量赋值*/ /*图形初始化代码*/

cx=200; cy=200; fp = fopen("ball.txt", "w"); if(fp==NULL) { l=100; v=10; } else { printf("please enter length and velocity:"); scanf("%d%d", &l, &v); } fprintf(fp, "%d %d", l, v); fclose(fp); initgr(); for(i=0; i<PNUM; i++) {

/*把 200 赋给 cx*/ /*把 200 赋给 cy*/ /*以写方式打开文件 ball*/ /*if(逻辑条件)*/ /*条件为真,执行 l、v*/

/*为假,执行一下语句*/ /*提示输入长度和速度*/ /*输入 l 与 v 的值*/

/*磁盘文件的读写输入 l、v*/ /*关闭文件流 fp*/ /*初始化*/ /*循环体*/

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<PNUM; i++) { /*对 x 轴的赋值表达*/ /*对 y 轴的赋值表达*/ /*循环体*/ /*循环的嵌套*/ /*x 赋值表达式*/ /*y 的赋值表达式*/ /*循环体*/

for(j=0; !kbhit() && j<2*l*sin(PI/PNUM); j++ { for(k=0; k<1000; k++) delay(30); setcolor(BLACK); circle(bx, by, 5); setcolor(WHITE); for(k=0; k<PNUM; k++)

) /*嵌套循环*/ /*缓冲时间*/ /*设置颜色为黑色*/

/*以坐标(bx,by)半径为 5 画圆*/ /*设置颜色为白色*/ /*循环体语句*/ /* i 点的 x 坐标*/ /*i 点的 y 坐标*/

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); } } } }


相关文章:
C语言课设 编制曲线轨迹动画程序 完整版.doc
C语言课设 编制曲线轨迹动画程序 完整版 - 沈阳理工大学 学生姓名: 班级: 学号: 设计题目:编制曲线轨迹动画程序 一、设计要求: 设计要求: 学院 计算机程序训练...
编制曲线轨迹动画程序.doc
编制曲线轨迹动画程序_IT/计算机_专业资料。课设 课程设计报告 一、题目内容题目...希望这次课程设计是我学习 C 语言的 真正开始,我必将更加努力的学习它完善自己...
C语言设计.pdf
C语言设计_设计/艺术_人文社科_专业资料。目录一....编制曲线轨迹动画程序 1. 题目要求画一正八边形,...《沈阳理工大学课程设计(论文)》专 注:对于程序中...
C语言 三叶玫瑰曲线_图文.doc
C语言 三叶玫瑰曲线 - 沈阳理工大学 学生姓名 设计题目 班级 编制曲线轨迹动画程序 机械工程学院 学号 计算机程序训练任务书 一、设计要求 题目:编制曲线轨迹动画...
C语言动画程序_图文.pdf
.C 程序设计(第二版)[M],清华大学出版社,2000 -11- 沈阳航空工业学院课程...C语言课设 编制曲线轨迹... 9页 2下载券 用LOGO语言编写动画程序 2页 ...
动态函数图像演示-C语言课程设计实验报告(含源码).doc
C 语言课程设计实验报告题学 目: 动态函数图像演示院:软件学院 指导老师: 学...(3)设置对话框确定曲线的颜色 (4)画出一个小人沿着曲线轨迹移动,并画出曲线...
第2次课编制一个基本的程序应具备_图文.ppt
第2次课编制一个基本的程序应具备_计算机软件及应用_IT/计算机_专业资料。数控...C语言课设 编制曲线轨迹... 9页 2下载券 第二次课 公路基本建设程......
用C语言实现图形动画技术.pdf
COM PU TER ERA 程序设计 用 C 语言实现图形动画.../ 3 重新计算运动轨迹 3 / endx = startx + ...(0) ; / 3 设第 0 页为显示页 3 / ...
编制曲线轨迹动画程序.doc
编制曲线轨迹动画程序_IT/计算机_专业资料。课设 沈阳理工大学 材料科学与工程...我对 C 语言知识产生了极大地兴趣,其实 C 语言并没有那 么难,但也并不...
C语言课程设计.doc
C语言课程设计_计算机软件及应用_IT/计算机_专业资料...阶曲线绘制一、 设计内容 2 阶曲线公式可描述为 ...设一直角坐标系中,有一边长为 1 的正方形,以原点...
运动轨迹动画课件巧实现.doc
运动轨迹动画课件巧实现 放假了,张老师开始准备新学期的公开课。上学期他 拿了...窗格单击“添加效果” ,选择“动 作路径→绘制自定义路径”子菜单下的“曲线”...
C语言课设绘制余弦曲线和直线.doc
课程设计内容运用所学的 C 语言知识,编制和调试程序,具有如下功能: 在图形模式下,在屏幕上显示 0~360 度的 y=cos(x)曲线与直线 x=45(y-1)+31 的叠 加...
c语言课程设计-电子英汉词典(含源码).doc
C 语言课程设计 软件学院 指导老师: 学号: 姓名: 1 一、实验题目及要求 题目...} } /*设计当鼠标坐标移动且没有按下任 何键时鼠标的移动轨迹*/ while(!(...
课程名称C语言课程设计.doc
C 语言课程设计是学生学完学科基础课程“C 语言程序...3) 利用 C 语言的绘图功能绘制收入与税金关系曲线...3) 利用 C 语言的绘图功能绘制出物体运动轨迹。 B14...
动态函数图像演示-C语言课程设计实验报告(含源码).doc
动态函数图像演示-C语言课程设计实验报告(含源码)_...(4)画出一个小人沿着曲线轨迹移动,并画出曲线图形...四、课设结果及总结执行程序后,结果无误。画图程序...
C语言课程设计_桌球_图文.doc
C语言课程设计_桌球_工学_高等教育_教育专区。funcode程序实训 C 语言课程设计--桌球一、实验内容玩家通过移动球杆到单一的桌球处碰撞桌球运动, 当桌球于一定速度...
C语言程序课程设计报告-正文参考模板.pdf
表示轨迹的相对重要性,其值越大, 则该蚂蚁越倾向于 选择其他蚂蚁经过的路径,蚂蚁...java课程设计课程设计报... 30页 1下载券 《C语言程序设计》课程设... ...
级C语言课程设计方案课题安排.doc
课程设计共同要求: 用 C 语言编写较复杂程序的一些...模拟机场飞机起飞、降落,以及空中交通调度,具有动画...19.工厂 AGV 调度系统具体功能: 根据工厂轨迹,实现...
绘制函数曲线 c语言 课程设计 报告.doc
二、课程设计内容用 C 语言编写软件完成以下任务: 在图形模式下, 绘制一元二次
c语言课程设计-电子英汉词典(含源码).doc
c语言课程设计-电子英汉词典(含源码)_计算机软件及应用_IT/计算机_专业资料。....} } /*设计当鼠标坐标移动且没有按下任 何键时鼠标的移动轨迹 */ while(!...