计算机图形学上机实验-利用C语言图形函数绘图
C语言计算机形学二维和三维形

C语言计算机形学二维和三维形学综合编程实践C语言是一门广泛应用于计算机科学领域的编程语言,其强大的功能和灵活性使其成为众多程序员的首选。
在C语言中,我们可以通过编写代码来实现各种形状的绘制,包括二维和三维形状。
本文将介绍C语言中实现计算机图形学中的二维和三维形状的方法。
一、绘制二维形状在C语言中,我们可以使用图形库(例如OpenGL)来实现二维形状的绘制。
首先,我们需要引入相关的头文件,并初始化绘制窗口。
#include <gl/glut.h>int main(int argc, char** argv) {glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(500, 500);glutCreateWindow("2D Drawing");glClearColor(0.0, 0.0, 0.0, 0.0);gluOrtho2D(0, 500, 0, 500);glutDisplayFunc(drawShape);glutMainLoop();return 0;}在上述代码中,我们使用了glutInit函数初始化绘制窗口,并设置了窗口的大小和标题。
glClearColor函数用于设置窗口的背景颜色,gluOrtho2D函数用于设置二维投影。
最后,我们将绘制函数drawShape 注册到了显示回调函数glutDisplayFunc中,并启动了主循环。
接下来,我们可以在drawShape函数中实现绘制不同的二维形状。
例如,我们可以使用OpenGL的基本绘制函数glBegin和glEnd来绘制直线、矩形和圆形。
#include <gl/glut.h>void drawShape() {glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0, 1.0, 1.0); // 设置绘制颜色为白色glBegin(GL_LINES); // 绘制直线glVertex2f(100, 100);glVertex2f(400, 400);glEnd();glBegin(GL_QUADS); // 绘制矩形glVertex2f(200, 200);glVertex2f(300, 200);glVertex2f(300, 300);glVertex2f(200, 300);glEnd();glBegin(GL_TRIANGLE_FAN); // 绘制圆形glVertex2f(250, 250);for (int i = 0; i <= 360; i += 10) {glVertex2f(250 + sin(i * 3.14159 / 180) * 100, 250 + cos(i *3.14159 / 180) * 100);}glEnd();glFlush();}在上述代码中,我们使用了glBegin和glEnd来定义绘制的形状类型,并使用glVertex2f来指定每个顶点的坐标。
计算机图形学利用C语言图形函数绘图

计算机图形学课程实验 报 告实验题目 利用C 语言图形函数绘图 班 级 姓 名 学 号 指导教师 日 期Computer GraphicsReport Of course experiment-图形学课程实验报告-- 1 -实验说明试验目的: 掌握TurboC 语言图形函数的使用和学会绘制一般图形。
试验地点: 教九楼401 数学系机房实验要求(Direction ):1. 每个学生单独完成;2.开发语言为TurboC 或C++,也可使用其它语言;3.请在自己的实验报告上写明姓名、学号、班级;4.每次交的实验报告内容包括:题目、试验目的和意义、程序制作步骤、主程序、运行结果图以及参考文件;5. 自己保留一份可执行程序,考试前统一检查和上交。
实验内容实验题一1.1实验题目用如下图1所示,图中最大正n 边形的外接圆半径为R ,旋转该正n 边形,每次旋转θ角度,旋转后的的n 边形顶点落在前一个正六边形的边上,共旋转N 次,请上机编程绘制N+1个外接圆半径逐渐缩小且旋转的正n 边形。
要求:(1) n 、R 、N 、θ要求可以人为自由控制输入;(2)N+1个正六边形的中心(即外接圆的圆心)在显示屏幕中心。
1.2实验目的和意义1. 了解如何利用C 语言和图形函数进行绘图;2. 熟悉并掌握C 语言的图形模式控制函数,图形屏幕操作函数,以及基本图形函数;CB AR1R210图1利用C 语言图形函数绘图实验1如左图(一)所示:n=6 θ=100、N =1、R=R1、旋转一次。
依次类推,共旋转N 次。
3.通过对Turbo C进行图形程序设计的基本方法的学习,能绘制出简单的图形;4. 通过绘制N+1个正n边形,了解图形系统初始化、图形系统关闭和图形模式的控制并熟练运用图形坐标的设置,包括定点、读取光标、读取x和y轴的最大值以及图形颜色的设置。
1.3程序制作步骤(包括算法思想、算法流程图等)1.自动搜索显示器类型和显示模式,初始化图形系统,通过printf、scanf语句控制半径r、边数n、多边形的个数k、边的每次旋转角度d,的自由输入;2.给定一内接圆半径r,由圆内接多边形的算法公式:x[i]=r*cos((i+1) *2.0*pi/n)+320.0y[i]=240.0-r*sin(2.0*pi/n *(i+1))确定出多边形N的各个顶点坐标,然后利用划线函数line(),连接相邻两点,即形成一个正多边形。
利用C语言图形函数绘图共10页

计算机图形学课程实验 报 告实验题目班 级 姓 名 学 号 指导教师 日 期西安理工大学理学院应用数学系二零一二年春季学期信息与计算科学专业基础课Computer Graphics Report Of course experiment实验说明试验目的: 掌握TurboC 语言图形函数的使用和学会绘制一般图形。
试验地点: 教九楼401 数学系机房实验要求(Direction ):1. 每个学生单独完成;2.开发语言为TurboC 或C++,也可使用其它语言;3.请在自己的实验报告上写明姓名、学号、班级;4.每次交的实验报告内容包括:题目、试验目的和意义、程序制作步骤、主程序、运行结果图以及参考文件;5. 自己保留一份可执行程序,考试前统一检查和上交。
实验内容实验题一1.1实验题目用如下图1所示,图中最大正n 边形的外接圆半径为R ,旋转该正n 边形,每次旋转θ角度,旋转后的的n 边形顶点落在前一个正六边形的边上,共旋转N 次,请上机编程绘制N+1个外接圆半径逐渐缩小且旋转的正n 边形。
要求:(1) n 、R 、N 、θ要求可以人为自由控制输入;(2)N+1个正六边形的中心(即外接圆的圆心)在显示屏幕中心。
利用C 语言图形函数绘图实验11.2实验目的和意义1. 了解如何利用C语言和图形函数进行绘图;2. 熟悉并掌握C语言的图形模式控制函数,图形屏幕操作函数,以及基本图形函数;3. 通过对Turbo C进行图形程序设计的基本方法的学习,能绘制出简单的图形;4. 通过绘制N+1个正n边形,了解图形系统初始化、图形系统关闭和图形模式的控制,并熟练运用图形坐标的设置,包括定点、读取光标、读取x和y轴的最大值以及图形颜色的设置。
1.3程序制作步骤(包括算法思想、算法流程图等)算法思想:1.自动搜索显示器类型和显示模式,初始化图形系统,通过printf、scanf语句控制半径r、边数n、多边形的个数k、边的每次旋转角度d,的自由输入;2.给定一内接圆半径r,由圆内接多边形的算法公式:x[i]=r*cos((i+1) *2.0*pi/n)+320.0y[i]=240.0-r*sin(2.0*pi/n *(i+1))确定出多边形N的各个顶点坐标,然后利用划线函数line(),连接相邻两点,即形成一个正多边形。
C语言图形编程(三、绘图函数-02)4

C语言图形编程(三、绘图函数-02)4struct linesettingstype info;getlinesettings(&info);63.setwritemode() 设置画线模式函数功能:函数setwritemode() 设置画线模式用法:函数调用方式为 void setwritemode()(int mode);说明:参数mode只有两个取值0和1,若mode为0,则新画的线将复盖屏幕上原有的图形,此为缺省画线输出模式。
如果mode 为1,那么新画的像素点与原有图形的像素点先进行异或(XOR)运算,然后输出到屏幕上,使用这种画线输出模式,第二次画同一图形时,将擦除该图形。
调用setwritemode()设置的画线输出模式只影响函数line(),lineto(),linerel(),recangle()和drawpoly()。
setwritemode()函数对应的头文件是graphics.h返回值:无例:设置画线输出模式为0:setwritemode(0);(三)、多边形函数对多边形,无疑可用画直线函数来画出它,但直接提供画多边形的函数会给用户很大方便。
最常见的多边形有矩形、矩形块(或称条形)、多边形和多边形块,我们还把长方形条块也放到这里一起考虑,虽然它不是多边形,但它的特例就是矩形(块)。
下面直接介绍画多边形的函数。
64. rectangle() 画矩形函数功能:函数rectangle() 用当前绘图色、线型及线宽,画一个给定左上角与右下角的矩形(正方形或长方形)。
用法:此函数调用方式为void rectangle(int left,int top,int right,int bottom);说明:参数left,top是左上角点坐标,right,bottom是右下角点坐标。
如果有一个以上角点不在当前图形视口内,且裁剪标志clip设置的是真(1),那么调用该函数后,只有在图形视口内的矩形部分才被画出。
计算机图形学实验--完整版-带结果--vc++实现

计算机图形学实验报告信息学院计算机专业20081060183 周建明综括:利用计算机编程语言绘制图形,主要实现以下内容:(1)、中点算法生成任意斜率直线,并设置线型线宽。
(2)、中点算法生成圆(3)、中点算法生成椭圆(4)、扫描算法实现任意多边形填充(5)、Cohen_Sutherland裁剪(6)、自由曲线与曲面的绘制(7)、二维图形变换(8)、三视图变换实验一、直线的生成一、实验内容根据提供的程序框架,修改部分代码,完成画一条直线的功能(中点画线法或者Bresenham画线法任选一),只要求实现在第一象限内的直线。
二、算法原理介绍双击直线生成.dsw打开给定的程序,或者先启动VC++,文件(file)→打开工作空间(open workspace)。
打开直线生成view.cpp,按注释改写下列函数:1.void CMyView::OnDdaline() (此为DDA生成直线)2.void CMyView::OnBresenhamline()(此为Bresenham画直线)3.void CMYView::OnMidPointLine()(此为中点画线法)三、程序源代码1.DDA生成直线画法程序:float x,y,dx,dy,k;dx=(float)(xb-xa);dy=(float)(yb-ya);k=dy/dx;x=xa;y=ya;if(abs(k)<1){for (x=xa;x<=xb;x++){pdc->SetPixel(x, int(y+0.5),COLOR);y=y+k;}}if(abs(k)>=1){for(y=ya;y<=yb;y++){pdc->SetPixel(int(x+0.5),y,COLOR);x=x+1/k;}}//DDA画直线结束}2.Bresenham画直线源程序:float b,d,xi,yi;int i;float k;k=(yb-ya)/(xb-xa);b=(ya*xb-yb*xa)/(xb-xa);if(k>0&&k<=1)for(i=0;i<abs(xb-xa);i++){ d=ya+0.5-k*(xa+1)-b;if(d>=0){ xi=xa+1;yi=ya;xa++;ya=ya+0.5;}if(d<0){ xi=xa+1;yi=ya+1;xa++;ya=ya+1.5;}pdc->SetPixel(xi,yi,COLOR);}//BresenHam画直线结束}3.中点画线法源程序:float b,d,xi,yi;int i;float k;k=(yb-ya)/(xb-xa);b=(ya*xb-yb*xa)/(xb-xa);if(k>0&&k<=1)for(i=0;i<abs(xb-xa);i++){ d=ya+0.5-k*(xa+1)-b;if(d>=0){ xi=xa+1;yi=ya;xa++;ya=ya+0.5;}if(d<0){ xi=xa+1;yi=ya+1;xa++;ya=ya+1.5;}pdc->SetPixel(xi,yi,COLOR); }//BresenHam画直线结束}四、实验结果1、DDA生成直线2、Bresenham画直线3、中点画线法实验二、bresenham画圆一、实验内容根据提供的程序框架,修改部分代码,用Bresenham画法画一段圆弧或者画圆。
利用C语言实现简单计算机图形

利用C语言实现简单计算机图形计算机图形在现代计算机应用中起着重要的作用,可以用来实现各种效果和交互。
C语言作为一种广泛应用的编程语言,可以用来编写各种计算机图形程序。
本文将介绍利用C语言实现简单计算机图形的方法和技巧。
一、图形库的选择在使用C语言实现计算机图形时,我们需要选择一个合适的图形库来帮助我们进行图形的绘制和显示。
常用的图形库包括OpenGL、SDL、SFML等。
在选择图形库时,我们需要考虑到自己的需求以及所运行的平台,选择一个功能强大、易于使用的图形库。
二、绘制基本图形在开始实现图形程序之前,我们需要了解基本的图形绘制原理。
在C语言中,我们可以使用图形库提供的函数来实现各种图形的绘制。
比如,要绘制一个直线,我们可以使用线段绘制函数;要绘制一个圆形,我们可以使用圆形绘制函数。
通过调用相应的函数,我们可以实现各种基本图形的绘制。
三、实现图形效果除了基本图形的绘制,我们还可以利用C语言的一些特性来实现各种图形效果。
比如,我们可以使用循环语句和条件语句来实现动画效果;我们还可以使用数组和矩阵来处理图形的变换和旋转。
通过合理地运用这些特性,我们可以实现更加生动和复杂的图形效果。
四、键盘和鼠标事件实现计算机图形时,通常需要用户的输入来进行交互。
在C语言中,我们可以通过监听键盘和鼠标事件来实现用户的交互操作。
比如,我们可以通过监听键盘事件来控制图形的移动和变换;我们还可以通过监听鼠标事件来实现图形的选择和拖拽。
通过处理这些事件,我们可以实现更加灵活和交互的图形程序。
五、图形算法在实现计算机图形时,我们还需要了解一些常用的图形算法。
比如,直线的绘制可以使用Bresenham算法来实现,圆的绘制可以使用中点画圆算法来实现。
了解这些算法可以帮助我们更好地理解图形的绘制原理,并且优化我们的图形程序。
六、实例演示下面是一个使用C语言实现简单计算机图形的例子:```c#include <stdio.h>#include <graphics.h>int main(){int gd = DETECT, gm;initgraph(&gd, &gm, "");// 绘制一个直线line(100, 100, 200, 200);// 绘制一个矩形rectangle(300, 300, 400, 400);// 绘制一个圆形circle(500, 500, 50);// 绘制一个椭圆ellipse(600, 600, 0, 360, 100, 50);getch();closegraph();return 0;}```以上代码使用了BGI图形库来实现图形的绘制和显示。
C程序绘图基础

计算机图形学实验报告实验名称C程序绘图基础评分实验日期2012 年 5 月 4 日指导教师刘长松姓名专业班级学号一、实验目的1、掌握用Turbo C绘图时的步骤。
2、掌握C语言中的基本绘图函数及其用法。
3、掌握简单动画的实现方法。
二、实验要求1、编写一个正方珙程序(每一个比前一个稍小),并在其中用不同颜色画15个正方形。
2、编写一辆自行车一公路上由右至左快速行驶的程序。
自行图案可自行设计。
三、用C语言编写绘画程序的主要步骤及绘图函数(一)用C语言绘制图形的步骤:1、为了调用C语言提供的图形库函数,在程序的开头写上文件的包含命令;# include <graphics.h>2、图形系统初始化及关闭图形方式初始化是通过调用initgraph( )函数来完成,它的调用格式为:initgraph (* gdriver,* gmode,* path);该函数的功能是通过从磁盘上装入一个图形驱动程序来初始化图形系统,并将显示器设置到指定图形方式下。
参数gdriver, gmode, path的含义参见教材的有关章节。
在运行图形程序结束后,又要回到文本方式,以进行其它工作,这时应关闭图形方式。
其格式为:closegraph( )。
3、图形显示器的工作方式1)文本模式与字符坐标系在未通过图形初始化之前的屏幕上,只能显示字符的方式称为文本模式。
C语言能在指定位置显示字符,该坐标系以屏幕的左上角为坐标原点,水平向为x轴,自左向右;垂直方向为y轴,自上向下,坐标原点为(1,1)。
能显示的行数、列数及颜色与显示方式有关。
Turbo C支持6种不同的文本显示方式。
2)图形模式与点坐标系在屏幕上能显示图形的方式称为图形方式。
屏幕是由像素点组成的,通过initgraph函数的gmode参数来指定屏幕的分辨率,分辨率决定了像素点的多少。
在图形方式下,屏幕上每个像素的显示位置用点坐标系来描述。
在该坐标系中,屏幕的左上角为坐标原点O(0,0),水平向为x轴,自左向右;垂直方向为y轴,自上向下。
计算机图形学 使用VC开发绘图程序的基本方法

七、思考题(尽量做,计入成绩) :
1、为什么要用 CDC 定义一个对象来作图? Windows 使用与设备无关的图形设备环境进行显示 。MFC 基础类库定义了设备环境对象类----CDC 类。 因为使用的是 mfc,如果是 sdk 的话就得用 dc,这个 cdc 想当是一个给设备画画的笔。 2、如果要绘制多条直线,应该如何编程?
4、 VC 中编程环境中,工程(project)是什么意义?为什么要用 project 的方式管理代码?
Project 文件的扩展名是 dsp,这个文件中存放的是一个特定的工程,也就是特定的应用程序的有关信息, 每个工程都对应有一个 dsp 类型的文件。 clw 为扩展名的文件是用来存放应用程序中用到的类和资源的信 以 息的,这些信息是 VC 中的 ClassWizard 工具管理和使用类的信息来源。 因为用 project 的方式管理代码比较方便,可以看成是在一个文件夹下进行的。
3、 在 MyView.cpp 文件的 OnDraw 函数中加入如下代码。 pDC->MoveTo(100,100); pDC->LineTo(200,200); CPen *pOldPen; CPen dashPen; dashPen.CreatePen(PS_DASH,1,RGB(255,0,0)); pOldPen = pDC->SelectObject(&dashPen); pDC->LineTo(300,100); pDC->SelectObject(pOldPen); pDC->LineTo(400,200);
实验(No. 1
)题目:使用 VC 开发绘图程序的基本方法
实验目的及要求:
一、实验目的:
编写一个具有一定功能的 MFC 类库应用程序 (引入简单的视图/文档概念) 掌握 GDI 画图的基本方法, , 并调用系统函数画直线。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机图形学课程实验 报 告实验题目 利用C 语言图形函数绘图 班 级 姓 名 学 号 指导教师 日 期西安理工大学理学院应用数学系二零一一年春季学期信息与计算科学专业基础课Computer GraphicsReport Of course experiment实验说明试验目的:掌握TurboC语言图形函数的使用和学会绘制一般图形。
试验地点:教九楼401 数学系机房实验要求(Direction):1. 每个学生单独完成;2.开发语言为TurboC或C++,也可使用其它语言;3.请在自己的实验报告上写明姓名、学号、班级;4.每次交的实验报告内容包括:题目、试验目的和意义、程序制作步骤、主程序、运行结果图以及参考文件;5.自己保留一份可执行程序,考试前统一检查和上交。
实验内容实验题一1.1实验题目用如下图1所示,图中最大正n边形的外接圆半径为R,旋转该正n边形,每次旋转θ角度,旋转后的的n边形顶点落在前一个正六边形的边上,共旋转N次,请上机编程绘制N+1个外接圆半径逐渐缩小且旋转的正n边形。
要求:(1) n、R、N、θ要求可以人为自由控制输入;(2)N+1个正六边形的中心(即外接圆的圆心)在显示屏幕中心。
CBAR1R210图1利用C语言图形函数绘图实验1如左图(一)所示:n=6θ=100、N =1、R=R1、旋转一次。
依次类推,共旋转N次。
1.2实验目的和意义1. 了解如何利用C语言和图形函数进行绘图,同时熟练掌握C++图形绘制环境;2. 掌握C语言的图形模式控制函数,图形屏幕操作函数,以及基本图形函数;3. 通过对Turbo C进行图形程序设计的基本方法的学习,能绘制出简单的图形;4. 通过绘制N+1个正n边形,了解图形系统初始化、图形系统关闭和图形模式的控制,并熟练运用图形坐标的设置,包括定点、读取光标、读取x和y轴的最大值以及图形颜色的设置。
1.3程序制作步骤(包括算法思想、算法流程图等)算法思想:1.自动搜索显示器类型和显示模式,初始化图形系统,通过printf、scanf语句控制半径r、边数n、多边形的个数k、边的每次旋转角度d,的自由输入;2.给定一内接圆半径r,由圆内接多边形的算法公式:x[i]=r*cos((i+1) *2.0*pi/n)+320.0y[i]=240.0-r*sin(2.0*pi/n *(i+1))确定出多边形N的各个顶点坐标,然后利用划线函数line(),连接相邻两点,即形成一个正多边形。
3.根据边与角的关系,以及线段定比分点公式,可知旋转后的多边形的各个顶点的坐标。
公式如下:x[i]=(x[i]+x[i+1]/(k+1))y [i]=(y[i]+y[i+1]/(k+1))k=360/(n*d) (n为多边形的边数,d为多边形旋转的度数)然后与第二步相同,利用划线函数line(),连接形成又一个旋转过的正多边形,这样就形成了所要绘制的图形;4.关闭图形系统。
1.4主程序程序代码:/*----- 多边形的逐次旋转------*/#include "stdio.h"#include "conio.h"#include "math.h"#include "graphics.h"#include "stdlib.h"#include "time.h"void main(){int graphdriver=DETECT,graphmode; /*自动搜索显示器类型和显示模式*/ int r;int i,j,n,k,d;float x,y,q;int a[100],b[100];char str1[80],str2[80];printf("请输入正接圆的半径r:\n");scanf("%d",&r);printf("请输入多边形的边数n:\n");scanf("%d",&n);printf("请输入多边形的个数k:\n");scanf("%d",&k);printf("请输入每次的旋转角度d:\n");scanf("%d",&d);initgraph(&graphdriver,&graphmode,"D:\\TC"); /*初始化图形系统*/printf("\n\t注意:maxx=%d,maxy=%d\n",getmaxx(),getmaxy());printf("\n\tr=%d, n=%d, k=%d, d=%d",r,n,k,d);x=(getmaxx()+1)/2.0;y=(getmaxy()+1)/2.0;q=360/n; /*角增量*/q=q*3.1415926/180; /*将角增量化为弧度*/for(i=1;i<=n;i++) /*计算初始正n角形顶点坐标*/{a[i]=(int)((int)x+r*cos((i-1)*q));b[i]=(int)((int)y-r*sin((i-1)*q));}a[n+1]=a[1];b[n+1]=b[1]; /*闭合正n角形,以便连续画线*//*--------画k个正多角形-----------*/for(i=1;i<=k;i++){for(j=1;j<=n;j++) /*画一个正多角形*/line(a[j],b[j],a[j+1],b[j+1]);for(j=1;j<=n;j++) /*计算下一个正多边形顶点坐标*/{a[j]=(int)(a[j]+(a[j+1]-a[j])/d);b[j]=(int)(b[j]+(b[j+1]-b[j])/d);}a[n+1]=a[1];b[n+1]=b[1];}getch();closegraph();}1.5运行结果图实验题二2.1实验题目请绘制一个图:屏幕中央有一个半径为R1=160的大圆和一个同心的且半径为R2=120的小圆,同时在大圆和小圆中间均匀分布着12个与大圆和小圆相切的圆。
如下图2所示:要求:(1)分别用12种不同的颜色和填充模式填充12个小圆;(2)用自定义模式填充中间小圆,且用漫延填充方法填充;(3)用自定义模式填充中间小圆时,填充模式图案自己设计。
例如,用字母A 、字母B、字母C填充图案可设计为:2.2实验目的和意义1.学会运用画圆函数circle(),图形填充函数包括:setfillstyle()、setfillpattern()以及floodfill()来填充圆;2.学会用自定义模式填充指定圆,并且用漫延填充方法填充;3.学会用自定义图案来填充指定圆。
2.3程序制作步骤(包括算法思想、算法流程图等)算法思想:1.输入所要求环绕的小圆的个数n,以及中间圆所需的自定义填充模式m(1-A,2-C,3-D),设置画笔颜色,利用circle()画半径为160的大圆,然后画半径为120的小圆并按照输入的模式m选择相应的填充模式。
2.利用圆内接多边形的算法,算出环绕小圆的各个圆心坐标,公式如下:x[i]=r*cos( (i+1) * 2.0*pi/n)+200.0y[i]=200.0-r*sin( (i+1) * 2.0*pi/n)以20为半径画环绕的n个小圆,并用不同的颜色填充。
2.4主程序程序代码:/*----- 圆的填充------*/#include "stdio.h"#include "conio.h"#include "math.h"#include "graphics.h"#define pi 3.14159265#define MAX 50void main(){int graphdriver=DETECT,graphmode; /*自动搜索显示器类型和显示模式*/ double x[MAX],y[MAX];int i,j,n,m;double r,theta;double sin(double),cos(double);char p1[8]={(char)0x38,(char)0x6c,(char)0xc6,(char)0xc6,(char)0xff,(char)0xc6,(char)0xc6,(char)0x00};char p2[8]={(char)0x36,(char)0x7e,(char)0x66,(char)0x60,(char)0x60,(char)0x66,(char)0x7e,(char)0x3c};char p3[8]={(char)0xf0,(char)0xf8,(char)0x9c,(char)0x8c,(char)0x8c,(char)0x9c,(char)0xf8,(char)0xf8};r=160.0;printf("please input the numble of N=");scanf("%d",&n);printf("(1-A,2-C,3-D)please input the numble of m=");scanf("%d",&m);initgraph(&graphdriver,&graphmode,"D:\\TC"); /*初始化图形系统*/theta=2.0*pi/n;setcolor(3);circle(200,200,200);setcolor(6);setfillstyle(12,0);switch(m){case 1:setfillpattern(p1,9);circle(200,200,120);floodfill(200,200,6);break;case 2:setfillpattern(p2,9);circle(200,200,120);floodfill(200,200,6);break;case 3:setfillpattern(p3,9);circle(200,200,120);floodfill(200,200,6);break;}while(!kbhit()){for(j=2;j<=n;j++)for(i=0;i<=n;i++){x[i]=r*cos(theta*(i+j))+200.0;y[i]=200.0-r*sin(theta*(i+j));setcolor(i);circle((int)x[i],(int)y[i],(int)40);setfillstyle(SOLID_FILL,i);floodfill((int)x[i],(int)y[i],i);}delay(10000);cleardevice();setcolor(3);circle(200,200,200);setcolor(6);setfillstyle(12,0);switch(m){case 1:setfillpattern(p1,9);circle(200,200,120);floodfill(200,200,6);break;case 2:setfillpattern(p2,9);circle(200,200,120);floodfill(200,200,6);break;case 3:setfillpattern(p3,9);circle(200,200,120);floodfill(200,200,6); break;}}getch();closegraph();}2.5运行结果图实验题三3.1实验题目自选题目:(1)请编写一动画:绘制上述实验2中的图形,并要求:✓ 1.让图案中的12个小圆按顺时针或逆时针方向不停地旋转;✓ 2.半径为R2=120的小圆用黑色和实填充模式填充,并在小圆内绘制一些闪烁的星星(可参考课本P81 例3.27)。