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

合集下载

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语言图形函数绘图

计算机图形学课程实验 报 告实验题目 利用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页

利用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)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++实现

计算机图形学实验--完整版-带结果--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语言实现简单计算机图形的方法和技巧。

一、图形库的选择在使用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程序绘图基础

计算机图形学实验报告实验名称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开发绘图程序的基本方法

计算机图形学  使用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 画图的基本方法, , 并调用系统函数画直线。

C语言图形编程(绘图函数-01)word精品文档9页

C语言图形编程(绘图函数-01)word精品文档9页

C语言图形编程(三、绘图函数-01).txt女人谨记:一定要吃好玩好睡好喝好。

一旦累死了,就别的女人花咱的钱,住咱的房,睡咱的老公,泡咱的男朋友,还打咱的娃。

一、屏幕和视口设置与清除函数36. setviewport() 设置图形视口函数37. clearviewport()清除图形视口函数38. cleardevice() 清除屏幕函数39. getviewsettings() 获取图形视口设置函数二、调色板和颜色函数40. setpalette()设置调色板函数41. setallpalette()设置整个调色板函42. setbackcolor() 设置背景颜色函数43. setcolor() 设置颜色函数44. getbkcolor() 返回背景色函数45. getcolor() 返回当前绘图颜色46. getmaxcolor()返回最大颜色值函数47. getpalette() 获取调色板函数48. getpalettesize() 返回调色板大小函数49. getdefaultpalette() 获取缺省调色板函数三、屏幕位置函数50. getmaxx()返回最大x坐标函数51. getmaxy() 返回最大y坐标函数52. getx() 返回x坐标函数53. gety() 返回y坐标函数54. moveto()函数55. moverel() 相对移动函数Borland C++提供了一整套综合性的图形函数,上节介绍了其中有关图形显示的函数,本节介绍其中的绘图函数,下节将介绍它的图形文本函数。

一般绘图时,首先要清除屏幕,设置图形视口,设置绘图颜色,然后在屏幕上某个位置画点或直线或曲线等。

下面给出具有这些功能的函数。

一、屏幕和视口设置与清除函数36. setviewport() 设置图形视口函数功能:函数setviewport() 设置当前图形视口。

用法:函数调用方式为void setviewport(int left,int top,int right,int bottom,int clip);说明:参数left,top是左上角坐标,right,bottom是右下角坐标,它们都是绝对屏幕坐标。

项目3使用C语言图形函数画图

项目3使用C语言图形函数画图

项目3使用C语言图形函数画图实践任务3课程名称c语言程序设计实践任务使用C图形函数画图实践地点指导教师班级学生姓名学号教师评分日期实践任务3搭建VC++6.0集成开发环境3.1任务目的(1)掌握函数概念(2)掌握C图形函数的使用方法(3)掌握smartdraw的安装和使用3.2知识要点3.2.1屏幕坐标系屏幕显示模式就是数据在屏幕上的显示方式。

C语言把屏幕显示模式分为文本模式和图形模式两种。

图形模式中,为了便于指定屏幕上位置,我们取屏幕左上角为坐标原点,第一行所在位置为x轴,第一列所在位置为y轴,建立如图3-1所示的屏幕直角坐标系。

图3-4屏幕坐标示意图建立屏幕直角坐标系后,就可以用有序数对(x,y)表示屏幕上点的位置。

在点的坐标(x,y)中,x指定点的列坐标,y指定点的行坐标#显示器屏幕上象素的数目由分辨率决定,如果分辨率是640×480,即屏幕每行有640个象素,每列有480个象素。

3.2.1基本图形(1)画圆函数:voidcricle(intx,inty,intr);如图3-2所示图3-2画圆函数说明图示关键字void表示函数无返回值,circle是函数名,后面的括号里面是参数列表,参数之间用“,”号隔开,参数前面的关键字是参数的数据类型,xy为坐标,r为圆半径。

(2)画矩形函数:voidrectangle(intleft,inttop,intright,intbottom)(left,top)表示的是矩形左上角点坐标,(right,botom)表示的是矩形右下角点坐标,(3)设置画笔的颜色函数:voidsetcolor(intcolor);EasyX图形库使用24bit真彩色,通常使用预定义的字符常量来代表颜色字符常量在这里代表的是整形数,为了便于记忆,免除了人们记忆枯燥的数字,如setcolor(0x0000AA)和setcolor(RED)都是用来设置画笔颜色为红色,显然setcolor(RED)用起来很简单,还要说明的是表中整数值是16进制数。

C语言图形编程(三、绘图函数-02)5

C语言图形编程(三、绘图函数-02)5
drawpoly()函数对应的头文件为grpahics.h
返回值: 无
例: 下面的程序画一个封闭星形图与一个不封闭星形图:
#include<graphics.h>
void main()
{
int driver,mode;
static int polypoints1[18]={100,100,110,120,100,130,120,125,140,140,130,120,
printf("aspect ratio: %f",aspectratio);
69. circle()画圆函数
功能: 函数circle()使用当前绘图色并以实线画一个完整的圆。
用法:该函数调用方式为void circle(int x,int y,int radius);
说明: 参数x,y为圆心坐标,radius为圆半径,用像素个素表示。注意,调用circle()函数画圆时不用当前线型。
不同于ellipse()函数,只用单个半径radius参数调用circle()函数,故屏显纵横比可以自动调节,以产生正确的显示图。
此函数对应的头文件为graphics.h
返回值: 无
例: 画六个同心圆,圆心在(100,100)。
#include<graphics.h>
void main()
为了保证几何图形基本按预计情况显示在屏幕上,用屏显的纵横比来计算和纠正不同硬件及显示卡产生的畸变。计算纵横比所需要的水平方向和垂直方向的比例系数可调用函数getaspectratio()获得。
68. getaspectratio()获取纵横比函数
功能: 函数getaspectratio()返回x方向和y方向的比例系数,用这两个整型值可计算某一特定屏显的纵横比。

c语言画图函数

c语言画图函数

(一) 像素函数putpixel() 画像素点函数功能:函数putpixel() 在图形模式下屏幕上画一个像素点。

用法:函数调用方式为void putpixel(int x,int y,int color); 说明:参数x,y为像素点的坐标,color是该像素点的颜色,它可以是颜色符号名,也可以是整型色彩值。

此函数相应的头文件是graphics.h 返回值:无例:在屏幕上(6,8)处画一个红色像素点:putpixel(6,8,RED);getpixel()返回像素色函数功能:函数getpixel()返回像素点颜色值。

用法:该函数调用方式为int getpixel(int x,int y); 说明:参数x,y为像素点坐标。

函数的返回值可以不反映实际彩色值,这取决于调色板的设置情况(参见setpalette()函数)。

这个函数相应的头文件为graphics.h 返回值:返回一个像素点色彩值。

例:把屏幕上(8,6)点的像素颜色值赋给变量color。

color=getpixel(8,6);编辑本段(二) 直线和线型函数有三个画直线的函数,即line(),lineto(),linerel()。

这些直线使用整型坐标,并相对于当前图形视口,但不一定受视口限制,如果视口裁剪标志clip为真,那么直线将受到视口边缘截断;如果clip为假,即使终点坐标或新的当前位置在图形视口或屏幕极限之外,直线截断到屏幕极限。

有两种线宽及几种线型可供选择,也可以自己定义线图样。

下面分别介绍直线和线型函数。

line() 画线函数功能:函数line()使用当前绘图色、线型及线宽,在给定的两点间画一直线。

用法:该函数调用方式为void line(int startx,int starty,int endx,int endy); 说明:参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。

【计算机图形学课程】一.MFC基本绘图函数使用方法

【计算机图形学课程】一.MFC基本绘图函数使用方法

【计算机图形学课程】⼀.MFC基本绘图函数使⽤⽅法这是最近我《计算机图形学》课程实践编程课介绍的相关知识,主要是想通过MFC C++绘图,让学⽣体会下图形学相关的编程及简单的图形绘制,同时⾮常佩服学⽣的想象⼒,他们做得真的不错。

希望这篇基础⽂章对你有所帮助吧!尤其是有这门课程的学⽣或编程爱好者,如果⽂章存在错误或不⾜之处,还请海涵。

参考书籍:孔令德·《计算机图形学基础教程(Visual C++版)》学⽣绘制的图形还是⾮常有创新的,表⽰很满意,哈哈哈~⼀. MFC绘图基础知识 CDC类PS:这部分主要引⼊孔令德⽼师的知识,这篇⽂章以后⾯的编程为主。

VC++具有强⼤的绘图功能,虽然基于对话框的应⽤我推荐⼤家使⽤C# Winform程序,但是计算机图形和图像的基础知识,还是强烈推荐使⽤VC++ MFC实现。

这有助于让你深⼊的理解图形变换、图像处理等知识。

在Windows平台下,GDI(Graphics Device Interface)图形设备接⼝被抽象为上下⽂CDC类(Device Context,DC)。

Windows平台直接接收图形数据信息的不是显⽰器和打印机等硬件设备,⽽是CDC对象。

MFC中,CDC类定义设备上下⽂对象的基类,封装了所需的成员函数,调⽤CDC类的成员函数,绘制和打印图形及⽂字。

CDC类派⽣出CClientDC类、CMetaFileDC类、CPaintDC类和CWindowDC类,请读者⾃⾏学习,同时推荐阅读原书。

MFC常⽤CPoint、CRect、CSize等数据类型。

(1) CPoint类:存放点坐标(x,y);(2) CRect类:存放矩形左上顶点和右下⾓顶点的坐标(top、left、right、bottom),其中(top,left)为矩形的左上⾓点,(right,bottom)为矩形的右下⾓点;(3) CSzie类:存放矩形的宽度和⾼度的坐标(cx,cy),其中cx为矩形的宽度,cy为矩形的⾼度。

计算机图形学上机报告模板(3)

计算机图形学上机报告模板(3)

实验报告(第3周)
班级:姓名:学号:
实验名称: MFC程序中对话框和基本GDI函数的使用
报告内容:
1、任务描述
(1)使用向导创建一个单文档MFC应用程序,并添加同实验报告2的CRect
类(需要修改类名为myCRect)。

(2)定义如下图的输入对话框,输入参数后,使用myCRect计算长方形的周
长和面积,并输出到窗口离左上角为原点的(100,100)位置。

(3)添加MFC函数实现:输入对话框中,要求长度默认值为30,宽度默认值
为20,并且要求长度的默认值处于选定状态。

(4)使用SetPixel函数绘制(100,100)到(400,100)的一个像素宽的黑
色直线;使用LineTo函数和自定义画笔绘制(100,150)到(400,150)三个像素宽的蓝色直线。

(5)使用SetPixel函数绘制左上角(200,200)到右下角(300,300)的红色方
块;使用Rectangle函数和自定义画刷绘制左上角(350,200)到右下角
(500,300)的红色方块。

2、试验环境
(1)Visual Studio 6.0 (或以上)标准版
3、试验目标
(1)掌握MFC中对话框的使用
(2)掌握基本的GDI绘图函数
4、实验步骤
(运行结果抓图,有用的程序代码,并辅助文字说明)。

计算机图形学_用C画饼状图

计算机图形学_用C画饼状图

实验题目:根据某公司上半年产品销售状况是:computer50%、printer20%、plotter10%,scanner5%、computer paper10%、hard disk5%。

试画出下图所示的饼状图。

实验目的:熟悉C语言的图形图像函数实验指导:填充颜色和方式可以自定义自定义饼状图的代码:#include "stdio.h"#include "stdlib.h"#include "graphics.h"#include "conio.h"void main(){int gdriver,gmode;detectgraph(&gdriver,&gmode);if(gdriver<0){exit(1);}initgraph(&gdriver,&gmode,"c:\\tc3\\bgi");int start,end,i;int a[5];start=0;double d=3.6;printf("please input the percentage(Y ou should input five times!) :\n");for(i=0;i<5;i++){scanf("%d",&a[i]);}int top,left,h,w;top=100;left=300;h=2;w=25;for(i=0;i<5;i++){setfillstyle(i+1,4);end=start+a[i]*d;pieslice(160,200,start,end,100);bar(left,top,left+w,top+h*a[i]);start=end;top=top+h*a[i];switch(i){case 0:outtextxy(340,top-h*a[i]/2,"Computer");continue;case 1:outtextxy(340,top-h*a[i]/2,"Printer");continue;case 2:outtextxy(340,top-h*a[i]/2,"Plotter");continue;case 3:outtextxy(340,top-h*a[i]/2,"Scanner");continue;case 4:outtextxy(340,top-h*a[i]/2,"Computer paper");continue;}}outtextxy(140,340,"The pie chart of market");getch();closegraph();}。

CG实验1-利用C语言图形函数绘图

CG实验1-利用C语言图形函数绘图

实验1 利用C 语言图形函数绘图1实验目的:熟悉C 语言图形功能,为今后实验打基础。

2实验要求:在CodeBlocks 环境下编写程序 3实验内容例1 利用line()函数画圆在计算机绘图中,任何曲线均可以利用line()函数绘制。

下面通过绘制一个圆说明利用line()函数绘制曲线的方法。

在圆上任取一点P(X,Y),以C 点为圆心的圆的参数方程为⎩⎨⎧==SINstR Y COSstR X ** 在计算机绘图中,屏幕左上角为坐标原点,X 坐标方向水平向右,Y 坐标方向垂直向下。

在该坐标下,设圆心C 的坐标为(X0,Y0),则圆的参数方程变为:⎩⎨⎧-=+=SINst R Y Y COSstR X X *0*0 根据圆的参数方程,利用c 语言编程绘制圆。

程序1-1.cpp 实现利用line()函数画圆。

/*1-1.cpp*/#include<graphics.h> #include<math.h> main() {int i,j,r,xx[21],yy[21],x0,y0; float st=360/20*3.14/180; x0=300;y0=250;r=200; initgraph(800,600);setbkcolor(BLUE);setcolor(YELLOW); for(i=0;i<21;i++){ xx[i]=x0+r*cos(i*st);yy[i]=y0-r*sin(i*st); } for(i=0;i<20;i++)line(xx[i],yy[i],xx[i+1],yy[i+1]); getch();closegraph(); }例2 画一个金刚石图案程序1-2.cpp绘制图1-1所示的金刚石图案。

#include<graphics.h>#include<math.h>main(){int i,j,r,xx[20],yy[20],x0,y0;float st=360/20*3.14/180;x0=300;y0=250;r=200;initgraph(800,600);setbkcolor(BLUE);setcolor(YELLOW);for(i=0;i<20;i++){ xx[i]=x0+r*cos(i*st);yy[i]=y0-r*sin(i*st); } for(i=0;i<20;i++){for(j=0;j<20;j++)line(xx[i],yy[i],xx[j],yy[j]);}getch();closegraph();}图1-1金刚石图案具体实验要求:(1)修改1-2.cpp的代码,将绘图窗口尺寸置为1024*768,背景色为黄色,前景色为红色,在实验报告中给出完整的代码和对应的运行结果截图#include<graphics.h>#include<math.h>main(){int i,j,r,xx[20],yy[20],x0,y0;float st=360/20*3.14/180;x0=300;y0=250;r=200;initgraph(1024,768);setbkcolor(YELLOW);setcolor(RED);for(i=0;i<20;i++){ xx[i]=x0+r*cos(i*st);yy[i]=y0-r*sin(i*st); }for(i=0;i<20;i++){for(j=0;j<20;j++)line(xx[i],yy[i],xx[j],yy[j]);}getch();closegraph();}(2)修改1-1.cpp的代码,改变顶点个数,使得得到的图形更逼近于正圆,在实验报告中给出完整的代码和对应的运行结果截图#include<graphics.h>#include<math.h>main(){int i,j,r,xx[51],yy[51],x0,y0;float st=360.0/50*3.14/180;x0=300;y0=250;r=200;initgraph(800,600);setbkcolor(BLUE);setcolor(YELLOW);for(i=0;i<51;i++){ xx[i]=x0+r*cos(i*st);yy[i]=y0-r*sin(i*st); }for(i=0;i<50;i++)line(xx[i],yy[i],xx[i+1],yy[i+1]);getch();closegraph();}点向各分点绘直线。

用C语言实现画图程序

用C语言实现画图程序

一、选题背景:画图程序,通过画图中的功能绘制出美丽的图案。

二、设计思想:利用数学三角函数制作山峰和花朵出一条曲线、用画圆函数绘制太阳的形状、再进行颜色填充用绘制直线的函数来绘制比较粗的光线、用矩形函数画出矩形的边框、再画地球、直线画赤道、弧线画南北极和钟表的刻度盘。

三、流程图:四、程序清单:#include"graphics.h" /*调用图形库函数*/#include"math.h" /*调用数学函数*/#include"stdio.h" /*调用标准I/O函数*/#define PI 3.141596 /*宏定义PI字符串*/main() /*主函数*/{float i,x,y; /*定义单精度浮点型变量i,x,y*/int gdriver=DETECT,gmode,a=1; /*定义整型变量gdriver,gmode*/initgraph(&gdriver,&gmode,"d:\\tc"); /*定义变量后,初始化图形系统*/cleardevice();setbkcolor(a); /*背景颜色*/printf("\n");printf("\n"); /*C 语言图形函数*/printf("\n");printf(" the following math functions were used in the main function.\n");printf(" setbkcolor(int color);\n"); /* 背景颜色*/printf(" setcolor(int color);\n"); /* 画笔颜色*/printf(" putpexel(x,y,color);\n"); /* 画像素点*/printf(" line(x1,y1,x2,y2)\n"); /* 直线函数*/printf(" rectangle(xl,yt,xr,yb)\n");; /* 矩形函数*/printf(" arc(x,y,as,ae,r)\n"); /* 圆弧函数*/printf(" circle(x,y,r)\n"); /*圆形函数*/printf(" ellipse(x,y,as,ae,rx,ry)\n"); /* 椭圆函数*/printf("\n"); /* 按任意键开始演示*/setcolor(2);setlinestyle(0,0,3);rectangle(4,4,635,475); /*绘制矩形框*/getch();cleardevice();printf("\n"); /* 模拟手工画图*/printf("\n"); /* 函数曲线图形*/setcolor(3);setlinestyle(3,3,3);rectangle(4,4,635,475); /*绘制图纸边框*/for (i=0;i<=2*PI;i+=PI/99999){putpixel(40*i,170-21*i*sin(1.6*i),2);putpixel(40.3*i,170-22*i*sin(1.6*i),3);putpixel(40.6*i,170-23*i*sin(1.6*i),10);}for (i=0;i<=2*PI;i+=PI/99999) /*绘制花朵*/{putpixel(118-15*cos(4*i)*cos(i),160-15*cos(4*i)*sin(i),14);putpixel(118-25*cos(4*i)*cos(i),160-25*cos(4*i)*sin(i),13);putpixel(118-35*cos(4*i)*cos(i),160-35*cos(4*i)*sin(i),10);}for (i=0;i<=PI;i+=PI/99999){putpixel(320-315*cos(i),360-95*sin(i),11); /*绘制拱桥*/ putpixel(320-315*cos(i),360-96*sin(i),11); /*绘制拱桥*/ putpixel(320-315*cos(i),360-97*sin(i),11); /*绘制拱桥*/ }for (a=70;a<=570;a+=50)for (i=0;i<=PI;i+=PI/9999){putpixel(a-25*cos(i),360-40*sin(i),11); /*绘制桥*/}}for (x=0;x<=640;x+=0.001){putpixel(8*x,380-8*sin(x),9); /*绘制曲线水流*/}for (x=0;x<=600;x+=0.001){putpixel(10*x,405-10*sin(x),9); /*绘制曲线水流*/}for (x=0;x<=560;x+=0.001){putpixel(12*x,430-12*sin(x),9); /*绘制曲线水流*/}for(x=60;x<=80;x+=0.01){ellipse(270,360,180 ,0,160-x,25);}for (x=0;x<=520;x+=0.001){putpixel(8*x,455-8*sin(x),9); /*绘制曲线水流*/}setlinestyle(0,0,1);setfillstyle(1,12);fillellipse(320,60,25,25); /*绘制太阳*/for (x=280;x>=250;x-=0.0001)putpixel(x,60,12); /*绘制阳光线*/}for (x=360;x>=390;x+=0.0001){putpixel(x,60,12); /*绘制阳光线*/}for (y=24;y>=12;y-=0.0001){putpixel(320,y,12); /*绘制阳光线*/}for (y=96;y<=108;y+=0.0001){putpixel(320,y,12); /*绘制阳光线*/}setlinestyle(3,0,1);setcolor(12);for (i=0;i<=2*PI;i+=PI/12) /*绘制阳光线*/{line(320+40*cos(i),60-36*sin(i),320+70*cos(i),60-48*sin(i)); for (x=0;x<=55555;x+=0.1){y=y+x; /*延时控制*/}}setcolor(13);setlinestyle(0,0,1);rectangle(460,100,620,200); /*绘制地图框(矩形)*/ setcolor(11);setlinestyle(0,0,3);ellipse(540,150,0,360,77,48); /*绘制地球(椭圆)*/circle(540,150,46); /*绘制经线(圆形)*/ellipse(540,100,210,330,45,16); /*绘制北极圈(椭圆弧)*/ellipse(540,200,30,150,45,16); /*绘制南极圈(椭圆弧)*/setcolor(14);setlinestyle(3,0,1);line(460,150,620,150); /*绘制赤道(水平线)*/line(540,100,540,200); /*绘制经线(垂直线)*/setcolor(11); setlinestyle(0,0,1);for (i=0;i<=2*PI;i+=PI/300){putpixel(590-35*cos(i),50-35*sin(i),11); /*绘制0.1秒刻度*/}setcolor(14);setlinestyle(0,0,1);circle(590,50,2); /*绘制中心轴*/setcolor(13);setlinestyle(0,0,3);for (i=0;i<=2*PI;i+=PI/6){line(590+25*sin(i),50-25*cos(i),590+30*sin(i),50-30*cos(i));/*绘制小时*/for (x=0;x<=5555;x+=0.001){y=y+x; /*延时控制*/}getch();closegraph(); }五、主要解决问题的方法及技术关键1、主要问题及解决方法✓抛物线的画法用插补法画抛物线。

真正实现C语言绘制数学函数图像

真正实现C语言绘制数学函数图像

用C语言画函数图像横纵坐标单位长度比校正(3:5)真正的余弦函数#include<math.h>#include<stdio.h>int sishewuru(float a);void main(){int n = 450;float a[500], b[500];int i,j;a[0] = b[0] = 0;for (i = 1; i < n; i++)a[i] = a[i - 1] + 0.01;b[i] = cos(a[i]);}int A[500],B[500];for (i = 0; i < n; i++){//printf("sin(%f)=%f\n", a[i], b[i]);a[i] = 100 * a[i];b[i] = 55 * b[i];A[i] = sishewuru(a[i]);B[i] = sishewuru(b[i])+60;//printf("sin(%d)=%d\n", A[i], B[i]);}for ( i = 100; i >=0; i--){for ( j = 0; j < n; j++){if (i==B[j]){printf("*");}else{printf(" ");}}printf("\n");}}int sishewuru(float a){int m;if (a-floor(a)<0.5){m = a;return m;}else{m = a + 1;return m;}}1.调节输出框大小,字符显示大小2.确定函数的定义域3.确定定义域上的步长4.计算函数值5.确定函数值放大系数6.确定定义域恰好落在显示的区间内7.确定坐标的单位长度与字符实际长度之间的换算关系8.确定打点的顺序与坐标的关系定义域在),(ππ-的正弦函数图像定义域在),(ππ-的正切函数图像定义域在),(ππ22-的倒正切函数图像#include <math.h>#include <stdio.h>int sishewuru(float a);void main() {float minx = -2*3.14,maxx = 2*3.14,dx,x[500],y[500],k;//确定定义区间int lx = 500, i,j, Y[500]; dx = (maxx - minx) / 450; x[0] = minx; y[0] = 0.1 / sin(x[1]);for (i = 1; i <lx; i++) {x[i] = x[i - 1] + dx;y[i] =0.1/sin(x[i]);}k = 0.6/ dx;//扩大系数for (i = 0; i < lx; i++) {Y[i] = sishewuru(k*y[i]);//printf("%d\n", Y[i]);}for (i = 0; i <130; i++){for (j = 0; j < lx; j++) {if (i == -Y[j]+65) { printf("*"); }else{printf(" ");}}printf("\n");} } int sishewuru(float a ) {int m;if (a -floor(a )<0.5){m = a ;return m;}else{m = a + 1;return m;} }定义域在),(ππ22-半径为π的圆#include<math.h>#include<stdio.h>int sishewuru(float a);void main(){float minx = -2*3.14,maxx = 2*3.14,dx,x[500],y[2*500],k,r=0.5*maxx;//确定定义区间int lx = 500, i,j, Y[2*500];dx = (maxx - minx) / 450;x[0] = minx;y[0] = 0.1 / sin(x[1]);for (i = 1; i <lx; i++){x[i] = x[i - 1] + dx;y[i] =sqrt(r*r-x[i]*x[i]);//确定函数表达式y[lx + i] = -1*y[i];}k = 0.6/ dx;//扩大系数for (i = 0; i < 2*lx; i++){Y[i] = sishewuru(k*y[i]);//printf("%d\n", Y[i]);}for (i = 0; i <136; i++){for (j = 0; j < lx; j++){if (i == -Y[j] + 68 || i == -Y[j+lx] + 68){printf("*");}else{printf(" ");}}printf("\n");}}int sishewuru(float a){int m;if (a-floor(a)<0.5){m = a;return m;}else{m = a + 1;return m;}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)。

相关文档
最新文档