Circle方法用于绘制圆

Circle方法用于绘制圆
Circle方法用于绘制圆

Circle方法用于绘制圆、椭圆、扇形或弧,其语法格式如下:

[对象。]Circle[[Step](x,y)],半径[,颜色][,起始角][,终止角了[长短轴比率].

对象可以是窗体或图片框控件,其中各参数的含义如下:

Step:该参数是可选的,如果使用该参数,则表示圆心坐标(x,y)是相对当前点(CurrentX,CurrentY)的,而不是相对坐标原点的。

(x,y):用于指定圆的圆心,也是可选的,如果省略则圆心为当前点(CurrentX,GurrentY)。

半径:用于指定圆的半径,对于椭圆来讲,该值是椭圆的长轴长度。

颜色:指定所绘制图形的颜色。

起始角、终止角:用来指定圆弧或扇形的起始角度与终止角度,单位为弧度。取值范围为0~2π时,绘制的是圆弧:给起始角与终止角取值前添加一个负号,则所绘制的是扇形,负号表示绘制圆心到圆弧的径向线。省略这两个参数,则所绘制的是圆或椭圆。

VB规定,从起始角按逆时针方向绘制圆弧至到终止角处,水平向右方向为0度,且与坐标系统无关,如图9.18所示。

长短轴比率:当需要绘制椭圆时,可使用该参数指定椭圆长短轴的比率。若值大于1,则所绘制的是竖立的椭圆;若值小于1,则所绘制的是扁平的椭圆。该值的缺省值为1,即省略时绘制的是圆。

例如,使用下列语句绘制出的各种图形如图9.19所示。

实例9.4绘制太极图

使用Circle方法绘制出如图9.20所示的太极图。

代码如下:

首先定义了一个名为Tjt的子过程,形参x和Y为太极图的圆心,r为半径。在窗体的Click事件过程中以不同的参数调用Tjt子过程,运行程序,单击窗体后就会在窗体的不同位置绘制出大小不同的太极图。

图形学实验三-画圆

实验三圆的生成算法 一、实验目的 编写圆的扫描转换算法程序,验证算法的正确性。 二、实验任务(2学时) 编写中点画圆法的扫描转换程序,考虑原点在(x0,y0)处程序的改动;编写Bresenham 画圆法的扫描转换程序,思考其与中点画圆算法的区别于联系。 三、实验内容 1、圆的Bresenham算法 (1)算法 设圆的半径为r。先考虑圆心在(0, 0),并从x=0、y=r,开始的顺时针方向的1/8圆周的生成过程。在这种情况下,x每步增加1,从x=0开始,到x=y结束。即有 x i+1 = x i + 1 相应的y i+1则在两种可能中选择: y i+1 = y i或者y i+1 = y i-1 选择的原则是考察精确值y是靠近y i还是 靠近y i-1(如右图), 计算式为: y2 = r2-(x i+1)2 d1 = y i2-y2 = yi2-r2+(x i+1)2 d2 = y2-(y i-1)2 = r2-(x i+1)2-(y i-1)2 令p i=d1-d2,并代入d1、d2,则有 p i = 2(x i+1)2 + y i2 + (y i-1)2-2r2 p i称为误差。如果p i<0则y i+1=y i,否则y i+1=y i-1。 p i的递归式为 p i+1 = p i + 4x i +6+2(y i+12- y i2) -2(y i+1-y i) p i的初值由上式代入x i=0,y i=r而得 p1 = 3-2r 根据上面的推导,圆周生成算法思想如下: 1) 求误差初值,p1=3-2r,i=1,画点(0, r); 2)求下一个光栅位置,其中x i+1=x i+1,如果p i<0则y i+1=y i,否则y i+1=y i-1; 3) 画点(x i+1, y i+1); 4)计算下一个误差,如果p i<0则p i+1=p i+4x i+6,否则p i+1=p i+4(x i-y i)+10;

计算机图形学正负法画圆

计算机图形学试验报告(六) 试验名称:利用正负法画圆 专业:地理信息系统班级:2011级1班学号:********姓名:日期:2013年 一、试验内容 1、利用中点法思想编写函数; 2、利用算法生成圆; 3、完成属性设置和增加交互功能; 二、试验目的 通过上机操作,编写中点法生成圆,理解重点算法的生成原理,并实现简单的交互功能。 三、试验原理 中点法生成圆,是利用函数曲线的交点与两个像素的中点的位置关系,来确定下一像素点的选取,决策变量d的初始值为d=d=5.0/4-r; 当点(x,y)在圆内时,d<0;当点在圆外时,d>0;当点在圆上时,d=0。根据判别变量F的正负,可设定x,y的移动方向,然后利用映射变换生成整个圆。 四、程序设计流程

五、试验程序 (1) #include “graphics.h” #include “conio.h” void MidpointCircle(x0,y0,r,color) { int x,y; float d; x=0; y=r; d=5.0/4-r; //设置初始变量d while(x<=y) { //结束判断 putdot(x0,y0,x,y,color); if(d<0) d+=x*2.0+3; //更新判别变量 else { d+=2.0*(x-y)+5; y--; //点在圆外,向下走一个单位} x++; } } putdot(x0,y0,x,y,color) { putpixel(x0+x,y0+y,color); putpixel(x0+x,y0-y,color); putpixel(x0-x,y0+y,color); putpixel(x0-x,y0-y,color); putpixel(x0+y,y0+x,color);

图形学画圆实验报告

图形学画圆实验报告

4.2.3程序实现与上机实习(二) 一、实验目的 编写圆和椭圆的扫描转换算法程序,验证算法的正确性。 二、实验任务 1.编写中点画圆法的扫描转换程序,考虑原点在(x0,y0)处程序的改动; 2.添加鼠标程序,实现交互式画圆;3.编写中点画椭圆法的扫描转换程序;4.添加鼠标程序,实现交互式画椭圆;三、实验内容 1.编写中点画圆法的扫描转换程序,考虑原点在(x0,y0)处程序的改动; 分析:考虑圆心不再原点,设圆心坐标为(x0,y0)。通过平移坐标原点到圆心,则第二个8分圆上一点p(x,y),其原始坐标为 x’=x+x0 y’=y+y0 即p’1(x0 +x, y+y0) 其它7个对称点分别是:p’2(x0+y,y+x0), p’3

(x0+y,y0-x),p ’4 (x0+x,y0-y),p ’5 (x0-x,y0-y),p ’6 (x0-y,y0-x),p ’7 (x0-y,y0+x),p ’8 (x0-x,y0+y) 算法程序如下: MidpointCircle(int x0,int y0,int r, int color) { int x,y; float d; x=0;y=r;d=1.25-r; CirPot(x0,y0,x,y,color); while (x<=y) { if(d<0) { d+=2*x+3; x++; } else { d+=2*(x-y)+5; x++; y--; } O(0Y X R X Y p ’1(x0 p ’2 p ’3 p ’4 p ’5 p ’6 p ’7 p ’8

CirPot(x0,y0,x,y,color); } /* while*/ } /* MidpointCiecle */ int CirPot(int x0,int y0,int x,int y,int color) { Setpixel((x0+x),(y0+y)); Setpixel((x0+y),(y0+x)); Setpixel((x0+y),(y0-x)); Setpixel((x0+x),(y0-y)); Setpixel((x0-x),(y0-y)); Setpixel((x0-y),(y0-x)); Setpixel((x0-y),(y0+x)); Setpixel((x0-x),(y0+y)); } 程序实现步骤: (1)建立MidPointCircle工程文件; (2)右击CMidPointCircleView类,建立成员函数 void MidpointCircle(CDC *pDC,int x0, int y0, int r, COLORREF color) int CirPot(CDC *pDC,int x0, int y0, int x,

圆的认识与画圆练习

圆的认识与画圆练习 教学内容:青岛版数学六年级上册56~59页,信息窗1第2课时。 教学目标: 1.进一步体会圆的特征;熟练掌握圆的各部分名称,能灵活、正确地按要求画圆,用圆的知识来解释生活中的简单现象;认识扇形,知道扇形的大小与圆心角的关系。 2.在画圆练习中,发展学生的空间观念。 3.经历对圆的认识知识的整理梳理,培养学生归纳、概括能力。 4.培养学生独立思考及综合运用知识解决问题的能力。 教学重点和难点: 教学重点:进一步体会圆的特征,熟练的按要求画圆。 教学难点:归纳圆的特征,发展空间观念,应用所学知识解决生活中的实际问题。 教具、学具: 教师准备:多媒体课件、圆规、三角板。 学生准备:圆规、三角板。 教学过程: 一、问题回顾,再现新知。 1.谈话导入:同学们,还记得上节课我们学习交通中的圆吗?说一说你对圆都有哪些了解?(引导学生回顾有关圆的知识。) 预设: (1)圆的画法; (2)圆的各部分名称; (3)圆的特征; (4)圆是轴对称图形。…… 2.自主整理圆的知识。 请同学们用自己喜欢的方法整理有关圆的知识。 教师出示复习指导:

(1)我们是用什么工具画圆的?说一说是怎样画的? (2)什么是圆心、半径、直径?用哪个字母表示? (3)同一个圆里半径和直径有什么关系? (4)圆是轴对称图形吗?有多少条对称轴? (5)什么是扇形,扇形的大小与什么有关? 3.汇报交流,构建知识网络。 学生汇报,其他生认真倾听及时补充,教师根据学生的回答将知识点适当板书,形成知识网。 (1)用图钉、细线和铅笔画圆。 圆的画法:(2)用圆形的盖子。①圆规两脚分开定好两脚尖距离; (3)用圆规画圆②把有针尖的一脚固定在一点上; ③把有铅笔的一脚旋转一周。 圆圆心:圆规针尖固定一点叫圆心,用O表示。 的圆的各半径:连接圆心和圆上任意一点的线段叫半径用r表示。 部分名称直径:通过圆心并且两端都在圆上的线段叫直径d表示。 认 识(1)同一个圆里有无数条半径和直径; 圆的特征:所有的直径都相等,所有的半径都相等; 直径是半径的2倍d=2r,半径是直径的r=d/2 (2)圆是轴对称图形,直径所在的直线都是圆的对称轴。 4.小结评价:看来大家掌握的不错,今天我们就来利用圆的知识解决一些实际问题。(板书课题:圆的认识与画圆练习) 二、分层练习,巩固提高。 (一)基本练习,巩固新知。 1.判断:(补充练习) (1)圆有无数条对称轴。() (2)圆的直径就是圆的对称轴。()

计算机图形学画圆实验报告

洛阳理工学院实验报告用纸

(2)画理想圆流程图如图-1: 图-1:画理想圆流程图 (3)中点画圆法 图-2 中点画圆法当前象素与下一象素的候选者

数,将乘法运算改成加法运算,即仅用整数实现中点画圆法。 (4)Bresenham画圆法 Bresenham画线法与中点画线法相似,,它通过每列象素中确定与理想直线最近的象素来进行直线的扫描的转换的。通过各行,各列的象素中心构造一组虚拟网格线的交点,然后确定该列象素中与此交点最近的的象素。该算法的巧妙之处在于可以采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列的所求对象。 假设x列的象素已确定,其行下标为y。那么下一个象素的列坐标必为x+1。而行坐标要么不变,要么递增1。是否递增1取决于如图所示的误差项d的值。因为直线的起始点在象素中心,所以误差项d的初始值为0。X下标每增加1,d的值相应递增直线的斜率值,即d=d+k(k=y/x为直线斜率)。一旦d>=1时,就把它减去,这样保证d始终在0、1之间。当d>0.5时,直线与x+1垂直网络线交点最接近于当前象素(x,y)的右上方象素(x+1,y+1);而当d<0.5时,更接近于象素(x+1,y),当d=0。5时,与上述二象素一样接近,约定取(x+1,y+1)。令e=d-0。5。则当e>=0时,下一象素的y下标增加1,而当e〈0时,下一象素的y下标不增。E的初始值为-0.5. (二)实验设计 画填充点流程图,如图-3: 图-3:圆的像素填充过程NS图 画理想圆,记录圆心坐标,计算半径大小,并记录 是否开始填充 否 是 初始化计数器、标志变量,设置最大计数值 调用Bresenha m画圆算法 否 是 填充标记是否为真 (While)计数变量小于最大计数值 循环变量temp + 1 填充计算出来的temp个坐 标点 计算需要填充坐标数组的 前temp个坐标

计算机图形学实验报告 (2)

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

计算机图形学-画椭圆和圆

计算机图形学实验 圆、椭圆的中点算法 学院:计算机科学与技术学院专业:软件工程 班级:软工152 学号:08 学生姓名:刘强坤

姓名刘强坤学号408 实验组实验时间10-24 指导教师成绩实验项目名称圆,椭圆中点算法 实 验要求优化后的算法:二次差分法可任意指定圆心坐标 实 验 目 的 实 验 环 境 VS 2015 实验内容圆: void Bresenham_Circle( int xc, int yc, int r) ( int x, y, d; x = 0; y = r; d = 3 - 2 * r; glVertex2i(x + xc, y + yc); while (x < y) ( if (d < 0) ( d = d + 4 * x + 6; ) else ( d = d + 4 * (x - y) + 10; 学院:计算机科学与技术专业:软件工程班级:软工152

y--; ) x++; glVertex2i(x + xc, y + yc); glVertex2i(y + xc, x + yc); glVertex2i(y + xc, -x + yc); glVertex2i(x + xc, -y + yc); glVertex2i(-x + xc, -y + yc); glVertex2i(-y + xc, -x + yc); glVertex2i(-x + xc, y + yc); glVertex2i(-y + xc, x + yc); ) ) 椭圆: void Ellipsepot( int x0, int y0, int x, int y) ( //1 setPixel(( x0 + x), ( y0 + y)); // 2 setPixel(( x0 + x), ( y0 - y)); // 3 setPixel(( x0 - x), ( y0 - y)); // 4 setPixel(( x0 - x), ( y0 + y)); ) //中点画椭圆算法 void MidPoint_Ellipse( int x0, int y0, int a, int b) ( double sqa = a*a; double sqb = b*b; double d = sqb + sqa*(0.25 - b); int x = 0; int y = b; Ellipsepot( x0, y0, x, y); // 1 while (sqb*(x + 1) < sqa*(y - 0.5)) ( if (d < 0) ( d += sqb*(2 * x + 3);

圆的画法

圆的画法 教学目标: 1. 培养学生自主画圆的能力,让学生经历用自己的方法画圆,按要求用圆规画圆的过程。 2. 让学生掌握用圆规按要求画圆的方法,认识圆的大小和半径的关系。 3. 让学生积极参加动手画圆活动,获得成功的学习体验,发展初步的空间观念。 教学重点: 掌握用圆规按要求画圆的方法。 教学难点: 掌握用圆规按要求画圆的方法。 课前准备: 多媒体课件、圆规、直尺一把、剪刀一把、白纸一张。 教学过程: 一、谈话导入 (一)师:在上一节课,我们已经认识圆, 同学们会不会画圆?这节课我们就一起去学习 怎么样画圆。(板书课题:画圆) 二、自主画圆 (一)讨论:可以怎样画?再利用自己准备好的物品画圆。 (二)交流:交流自己画出的圆,并说一说是怎样画的。

三、用圆规画圆 (一)师说:前面我们借助实物来描摹画圆,画出圆的大小是固定的,不能随意变化。为了既准确又方便地画出一个圆,我们可以用画圆的专用工具——圆规来画。 1.下面同学们先用圆规试画一个圆,然后与同桌的同学说说你是怎样画的? 2.找两名学生说说如何画圆。 3.归纳画圆的步骤。(画圆的步骤归纳起来,有三步。) (1)把圆规的两脚分开,定好两脚间的距离作为半径。(板书:定半径) (2)把有针尖的一只脚固定在一点上作为圆心。(板书:定圆心)(3)让装有铅笔尖的一只脚旋转一周。(板书:旋转一周) 4.请同学按要求画圆。(下面请同学们按照这三个步骤画出要求的圆。) (1)用圆规画一个半径是2cm 的圆,并用字母O、r、d 表示出它的圆心、半径和直径。从上节课学习的知识过渡到这节课学习的新知识,揭示课题。让学生自主画圆,培养学生动手能力和自主探究能力。巩固学生掌握用圆规按要求画圆的方法。 (2)用圆规画一个半径是4cm 的圆。 5.在画圆时要注意什么?(有针尖的一只脚不能动,两脚间的距离不能变。) 6.刚才我们画出两个位置和大小都不同的圆,想一想:圆的位置

画圆的方法

一、画圆的方法: 1、用手指画圆。以大拇指为圆心,以食指与大拇指之间的距离为半径,旋转一周所形成的图形就是圆形。 2、用线绳、图钉和笔画圆。用图钉固定线绳的一端做圆心,将笔系在线绳的另一端,拉直绳子作半径,旋转线绳一周所形成的图形就是圆。 3、用圆规画圆。将圆规的一个针脚固定在本上做圆心,用圆规两个针脚间的距离作半径,旋转圆规一周所形成的图形就是圆。 4、用物体的圆形面画圆。按住物体的圆形面,用笔在物体的圆形面的圆周上画一圈所形成的图形就是一个圆。 二、为什么车轮都是圆形的? 答:因为在同一个圆中所有的半径都相等。车轴在圆心的位置,圆形车轮在滚动时,圆心在一条直线上运动,这样车才更平稳。而其他的图形不具备这样的特点,所以车轮都是圆形的。 三、井盖为什么是圆形的? 答:因为在圆形中,直径是圆中最长的线段,在同一个圆内有无数条直径,所有的直径都相等,无论怎样翻转井盖,井盖都不会掉下去,这样更安全。 四、围观时大家为什么自觉的就站成圆形? 答:因为圆中同一个圆中所有的半径都相等。围成圆形时,每一个围观的人与被围观的事物之间的距离都是相等的,所有站成圆形能让每个人看清楚围观的事物。 五、寻找圆直径的方法。 1、圆形的纸片等一切可以对折的圆形,用对折的方法找到圆的直径。 2、可以用两个三角板和一个直尺来找圆的的直径。(如图1-1所示) 1-1 1-2 1-3 AB之间的线段的长度就是圆的直径。 3、画出圆的外接正方形,正方形的边长就是圆的直径。(如图1-2所示) 4、量出圆的周长,用圆的周长除以3.14也可以得到圆的直径的长度。 5、画出圆中的一条弦,找到弦的中点,过中点画这条弦的垂线,圆周上这两点间的线段就是圆的直径。(如图1-3所示) 六、圆周长的测量方法。 1、滚动法。画出圆的一条直径,在直尺上滚动圆一周,从直径的一个端点和直尺的零刻度线重合开始向前滚动直到再次滚动到起始的端点为止。此时的读数就是这个圆的周长。 2、绳测法。用绳绕圆片一周,剪去多余的绳子,量出绳子的长度就是这个圆片的周长。

计算机图形学-设计算法绘制直线与圆

信息与计算科学专业基础课 Computer Report Of course 计算机图形学课程实验 报告 实验题目设计算法绘制直线与圆 班级 姓名 学号 指导教师 日期

实验说明 试验目的: 掌握直线和圆的基本生成算法思想,并上机编程实现相应的算法。 试验地点: 教九楼401 数学系机房 实验要求(Direction): 1. 每个学生单独完成;2.开发语言为TurboC 或C++,也可使用其它语言;3.请在自己的实验报告上写明姓名、学号、班级;4.每次交的实验报告内容包括:题目、试验目的和意义、程序制作步骤、主程序、运行结果图以及参考文件;5. 自己保留一份可执行程序,考试前统一检查和上交。 实验内容 实验题一 实验题目 1).用DDA 法在屏幕上画一条具有三个像素宽的直线段L1。要求:(1)直线段L1的两个端点坐标和画线颜色都要求可以随机输入;(2)要求输出直线段L1上的各点坐标;(3)画出直线的同时要求标明两端点坐标。 2).将课堂所讲的斜率01、-1

数学教学用画圆器制作方法

本技术新型涉及教学领域,尤其涉及一种数学教学用画圆器。本技术新型要解决的技术问题是提供一种不会对黑板造成损坏、画圆时不会偏移位置的数学教学用画圆器。为了解决上述技术问题,本技术新型提供了这样一种数学教学用画圆器,包括有第一支杆等;第一支杆左侧后部连接有第一轴承座,第一轴承座上连接有第一转杆,第一转杆与第一支杆连接,第一轴承座左侧连接有橡胶柱,橡胶柱左侧连接有吸盘,第一支杆左侧前部连接有夹紧装置。本技术新型通过让吸盘吸在黑板上作图,这样能够达到教师在黑板上画图时,不损坏黑板的目的,并且设置有夹紧装置和移动装置的缘由。 技术要求 1.一种数学教学用画圆器,其特征在于,包括有第一支杆(1)、第一轴承座(2)、第一转杆(3)、橡胶柱(4)、吸盘(5)和夹紧装置(6),第一支杆(1)左侧后部连接有第一轴承座(2),第一轴承座(2)上连接有第一转杆(3),第一转杆(3)与第一支杆(1)连接,第一轴承座(2)左侧连接有橡胶柱(4),橡胶柱(4)左侧连接有吸盘(5),第一支杆(1)左侧前部连接有夹紧装置(6)。 2.根据权利要求1所述的一种数学教学用画圆器,其特征在于,夹紧装置(6)包括有第二支杆(601)、螺杆(602)、固 定夹板(603)、移动夹板(604)、螺帽(606)、第二弹簧(607)和第三支杆(608),第一支杆(1)左侧连接有固定夹板(603),固定夹板(603)前后两端均连接第三支杆(608),第三支杆(608)右侧连接有螺杆(602),第三支杆(608)右侧连接有第二弹簧(607),第二弹簧(607)的另一端连接有第二支杆(601),第二支杆(601)之间连接有移动夹板(604),第二支杆(601)上开有螺纹孔(605),螺杆(602)穿过螺纹孔(605),螺杆(602)上连接有螺帽 (606),螺杆(602)穿过第二弹簧(607)。

Circle方法用于绘制圆

Circle方法用于绘制圆、椭圆、扇形或弧,其语法格式如下: [对象。]Circle[[Step](x,y)],半径[,颜色][,起始角][,终止角了[长短轴比率]. 对象可以是窗体或图片框控件,其中各参数的含义如下: Step:该参数是可选的,如果使用该参数,则表示圆心坐标(x,y)是相对当前点(CurrentX,CurrentY)的,而不是相对坐标原点的。 (x,y):用于指定圆的圆心,也是可选的,如果省略则圆心为当前点(CurrentX,GurrentY)。 半径:用于指定圆的半径,对于椭圆来讲,该值是椭圆的长轴长度。 颜色:指定所绘制图形的颜色。 起始角、终止角:用来指定圆弧或扇形的起始角度与终止角度,单位为弧度。取值范围为0~2π时,绘制的是圆弧:给起始角与终止角取值前添加一个负号,则所绘制的是扇形,负号表示绘制圆心到圆弧的径向线。省略这两个参数,则所绘制的是圆或椭圆。 VB规定,从起始角按逆时针方向绘制圆弧至到终止角处,水平向右方向为0度,且与坐标系统无关,如图9.18所示。 长短轴比率:当需要绘制椭圆时,可使用该参数指定椭圆长短轴的比率。若值大于1,则所绘制的是竖立的椭圆;若值小于1,则所绘制的是扁平的椭圆。该值的缺省值为1,即省略时绘制的是圆。

例如,使用下列语句绘制出的各种图形如图9.19所示。 实例9.4绘制太极图 使用Circle方法绘制出如图9.20所示的太极图。 代码如下:

首先定义了一个名为Tjt的子过程,形参x和Y为太极图的圆心,r为半径。在窗体的Click事件过程中以不同的参数调用Tjt子过程,运行程序,单击窗体后就会在窗体的不同位置绘制出大小不同的太极图。

《计算机图形学》实验报告模板(圆的扫描转换)

实验报告 课程名称计算机图形学 实验(实训)名称直线的扫描转换 班级信息与计算科学2009级姓名袁明学号2009010301040 同组者 实验(实训)日期完成日期 本实验(实训)所用学时统计 预习实验(实训)报告总计 评阅意见:成绩

实验报告 一、实验目的 1、掌握用数值微分法进行直线的扫描转换; 2、掌握用中点画线法进行直线的扫描转换; 3、掌握用Bresenham画线法进行直线的扫描转换; 4、学会在C语言环境下图形显示模式的设置。 二、算法原理介绍 1、数值微分法: DDA(Digital Differential Analyzer)画线算法也称数值微分法,是一种增量算法。它的算法实质是用数值方法解微分方程,通过同时对x和y各增加一个小增量,计算下一步的x、y值。 已知一条直线段L(P0, P1),其端点坐标为:P0 (x0, y0), P1(x1, y1)。可计算出直线的斜率k为: k=y1-y0/x1-x0 考虑当x从xi?xi+1时y的变化规律: 设?x=xi+1- xi xi+1= xi+ ?x 计算yi+1= kxi+1+b= k (xi+ ?x) +b = kxi+b+k?x = yi+k?x 当?x =1; yi+1 = yi+k 假定端点坐标均为整数,取直线起点P0 (x0, y0)作为初始坐标。画线过程从x的左端点x0开始,向x右端点步进,每步x递增1,y递增k(即直线斜率);取像素点(x,round(y))作为当前点的坐标。 注意上述分析的算法仅适用于|k|≤1的情形。在这种情况下,x每增加1,y最多增加1。当|k|>1时,必须把x,y地位互换 增量算法:在一个迭代算法中,如果每一步的x、 y值是用前一步的值加上一个增量来获得,则称为增量算法。 2、中点画线法: 假设x坐标为xp的各像素点中,与直线最近者已确定,为P(xp,yp),那么,下一个与直线最近的像素只能是正右方的P1(xp+1,yp),或右上方的P2(xp+1,yp+1)两者之一。令M为P1和P2的中点,易知M的坐标为(xp+1,yp+0.5)。 设Q是理想直线与垂直线x=xp+1

计算机图形学 实验 画圆法

XXXXXXXX 大学(计算机图形学)实验报告 实验名称 画圆法 实验时间 年 月 日 专 业 姓 名 学 号 预 习 操 作 座 位 号 教师签名 总 评 一、实验目的: 1.了解画圆法的基本思想; 2.掌握画圆法的基本步骤。 二、实验原理: 1. 中点画圆法 中点画圆法是利用圆心在坐标原点的、半径为R )0,0(圆的方程222R y x =+,将每个像素的中点坐标代入圆的方程得到d,再通过d 的值来确定中点与圆的位置。 取重点以上的像素点。,则中点在圆内,点下方的像素点;如果则中点在圆外,就取中 如果00,d <>d 若 d<0, 则取P1为下一象素,而且再下一象素的判别式为 若d>=0, 则应取P2为下一象素,而且下一象素的判别式为 第 一个象素是(0,R ),判别式d 的初始值为 中点画圆法绘出的只是一个完整圆弧的八分之一,然后根据圆良好的对称性,绘出和参考点对称的另外七个点,再用中点画圆法,以生成的这几个点为基础,绘出其它七段圆弧,构成一个完整的园。这七个点的坐标分别为:(x0+x,y0-y,c),(x0+x,y0+y,c), (x0-x,y0-y,c), (x0-x,y0+y,c),(x0-y,y0-x,c),(x0-y,y0+x,c), (x0+y,y0+x,c), (x0+y,y0-x,c)。 找到和参考点对称的另外几个点,再在中点绘制圆弧的定义函数中调用,绘制另外的几段圆弧。 。222)5.0()1()5.0,1()(R y x y x F M F d p p p p --++=-+==;32)5.0()2()5.0,2('222++=--++=-+=p p p p p x d R y x y x F d ;5)(2)5.1()2()5.1,2('222+-+=--++=-+=p p p p p p y x d R y x y x F d 。 R R F d -=-=25.1)5.0,1(0

《计算机图形学课内实验》实验报告

《计算机图形学课内实验》 实验报告 班级:计算机76班 姓名:朱亚坤 学号:2176413442 日期:2019.10.22

一、实验目的及要求 中点椭圆算法 ①熟练掌握中点椭圆算法,能够用C/C++编写程序实现任意大小和位置的中点椭圆的绘画 ②要求以绘图区域中心为坐标系原点(0,0) ③能够输入任意椭圆中心坐标(x,y)和参数rx和ry的值 二、实验环境 Windows 10 操作系统,Visual C++6.0 IDE,EasyX_2018 春分版 三、实验内容 用户在控制台输入椭圆中心坐标、长半轴长度和短半轴长度,利用中点椭圆算法,调用画点函数,在以绘图区域中心为坐标系原点(0,0)的图形界面,绘制出相应的中点椭圆。 四、数据结构和算法描述 中点椭圆算法将第一象限的部分分成两部分绘制,即在斜率绝对值小于1的区域内在x 方向取单位步长,在斜率绝对值大于1的区域内在y方向取单位步长。 取,可定义椭圆函数为 即作为决策参数。 从开始,在方向取单位步长直到区域1和区域2的界限处,然后转换为方向的单位步长,再绘制第一象限中剩余的曲线段。每一步都要检测曲线斜率值。 在区域1和区域2的交界区,,且 因此,移除区域1的条件是2r y 2x32r x 2y (3-40) 算法过程: 1.输入、和椭圆中心,并得到椭圆上的第一个点: 2.计算区域1中决策参数的初始值:

3.在区域1中的每个位置,从开始,假如,沿中心在的椭圆的 下一个点为,并且。否则,沿椭圆的下一个点为,并且。 其中 并且直到。 4.使用区域1中计算的最后点来计算区域2中参数的初始值: 5.在区域2的每个位置处,从开始,假如,沿中心为的椭圆的 下一个点为,并且否则,沿椭圆的 下一个点,并且。使用与区域1中相同的和增量进行计算,直到。 6.确定其他三个象限中的对称点。 7.将计算出的每个像素位置移动到中心在的椭圆轨迹上,并按坐标值绘制点: 五、调试过程及实验结果 问题一:电脑没有安装VS Studio怎么办 解决方案:由于我通常使用Codeblocks,而MFC只能在VS下使用,所以我就选择了Qt,经网上推荐,我准备直接使用Qt creator进行该实验,但研究了几天,Qt里面的一些槽函数还有信号响应机制是在搞不懂,所以果断放弃;最后在网上找到说给C odeblocks可以配置一个叫做EGE的图形库,可以方便画图,但不知为何,我按照网上的指导配置好后无法使用,一直没有找到解决方案;最后又在网上找到一个简易的易上手的计算机图形学库EasyX,但是这个库也只能在VC环境下使用,可我实在不想下载安装占用空间巨大的VS Studio,最后就找到了老古董Visual C++6.0,并配置了E asyX,这才正式开始了实验。 问题二:坐标轴上的数字是颠倒的 解决方案:经过查阅资料,EasyX中绘图界面里插入的文字方向是跟随坐标轴方向的,由于在插入文字前我已经改变了绘图界面的坐标原点和坐标轴方向,所以文字颠倒,

计算机图形学中点画圆实验

《计算机图形学实验》报告 2016年春季学期 实验:中点画圆 实验时间:2016年12月8日 实验地点:信息学院2204 实验目的:中点画圆

程序代码:#include void init (void) { glClearColor (1.0, 1.0, 1.0, 0.0); glMatrixMode (GL_PROJECTION); gluOrtho2D (0.0, 200.0, 0.0, 150.0); } class screenPt { private: GLint x, y; public: screenPt ( ) { x = y = 0; } void setCoords (GLint xCoordValue, GLint yCoordValue) { x = xCoordValue; y = yCoordValue;

} GLint getx ( ) const { return x; } GLint gety ( ) const { return y; } void incrementx ( ) { x++; } void decrementy ( ) { y--; } }; void setPixel (GLint xCoord, GLint yCoord) { glBegin (GL_POINTS); glVertex2i (xCoord, yCoord); glEnd ( );

} void circleMidpoint (GLint xc, GLint yc, GLint radius) { screenPt circPt; GLint p = 1 - radius; circPt.setCoords (0, radius); void circlePlotPoints (GLint, GLint, screenPt); circlePlotPoints (xc, yc, circPt); while (circPt.getx ( ) < circPt.gety ( )) { circPt.incrementx ( ); if (p < 0) p += 2 * circPt.getx ( ) + 1; else { circPt.decrementy ( ); p += 2 * (circPt.getx ( ) - circPt.gety ( )) + 1; } circlePlotPoints (xc, yc, circPt);

计算机图形学画圆算法源程序

#include void CirclePoint(int x, int y, int color, int m ) { putpixel(x+m, y+m, color); putpixel(y+m, x+m, color); putpixel(-y+m, x+m, color); putpixel(-x+m, y+m, color); putpixel(-x+m, -y+m, color); putpixel(-y+m, -x+m, color); putpixel(y+m, -x+m, color); putpixel(x+m, -y+m, color); } void MidBresenhamCircle(int r,int color, int m) { int x, y, d; x=0; y=r; d=1-r; while(x<=y) { CirclePoint(x, y, color, m); if(d<0) d+=2*x+3; else { d+=2*(x-y)+5; y--; } x++; } } void main() { int gdriver,gmode,a,b,c; gdriver=DETECT; initgraph(&gdriver,&gmode,"C:\\TC20\\BGI"); printf("qing shu ru\n"); scanf("%d,%d,%d",&a,&b,&c) setbkcolor(0); MidBresenhamCircle(a, b, c); getch(); closegraph(); }

用圆规画圆

用圆规画圆 设计理念:在学生已经认识了圆心和半径的基础上,通过画指定半径的圆加深对圆心和半径的认识,让学生利用圆规画圆,学生通过多次的尝试、失败、再尝试这一系列的动手操作活动,得出怎样用圆规画圆,学生通过自己反复的操作活动,对圆的认识由原来最初的认知状态,到比较系统、完整的认识,在这一过程中学生也有意识的体会出可以通过“尝试、失败、再尝试”的一系列活动来得出正确的结论,同时也培养了学生发现问题和探究问题的意识教材分析:教材对用圆规画圆的编排是先让学生用自己的方法自主画圆。呈现了四种不同的画圆方法(1)用带有圆面的物体描圆(2)用两支铅笔和一段线绳画圆(3)将直尺的一端固定,让铅笔随直尺的另一端转动画圆(4)直接用圆规画圆。接着用圆规画圆。教材用图文结合的形式呈现了用圆规画圆的三个步骤。然后再让学生按照要求做书上的“做一做”,逐步掌握用圆规画圆的方法。第1题是考查学生用圆规画圆的技能是否掌握,第2题考查学生能否根据固定的圆心位置用圆规画圆。“试一试”自己确定半径的长度,用圆规画圆,同桌比较所画圆的大小。然后提出“圆的大小和什么有关系”的问题,引导学生思考、讨论,使学生认识到:圆的大小与它的半径有关系,半径越大,圆就越大。体会半径对决定圆的大小的重要性。 学情分析:学生对圆心、半径、直径等已有了初步的认识,对画圆也有初步了解的的基础上,让学生自主画圆,但个别学生对圆规的使用还不太熟练,让他们经历多次尝试,再尝试的过程。 教学目标:1.经历用不同的方法画圆、按要求用圆规画圆的过程。 2.能用圆规按要求画圆,认识圆的大小与半径的关系。 3.积极参加数学活动,获得成功的学习体验,发展初步的空间观念。 教学重难点:通过操作和观察活动了解、掌握画圆的多种方法,初步学会用圆规画圆 教学准备:多媒体课件、圆卡纸、线、图钉、圆规、直尺、铅笔. 教学流程: 教师活动:一、问题情境 师生交谈上节课有关画圆话题,引出课题 学生活动:把物体上圆形的面按在纸上,然后描出一个圆 二、自主画圆: 1.让学生看书,了解教材中的画圆方式 2.让学生观察教材中的画法,然后鼓励学生同桌合作各画一个圆。 3.交流学生画圆的过程和方法,教师进行提问,关注画圆的注意事项。使学生知道:画圆时,要固定圆心和半径。 学生活动: 学生看书。然后交流画圆的方法 现在请同学们认真观察右边两幅图,看一看是怎样画的,然后同桌合作,用这两种方法,各画一个圆,试一试 学生合作画圆,教师巡视,对有困难的学生进行指导 三、圆规画圆 1.让学生观察圆规,了解圆规的结构特点。

计算机图形学划线实验报告

《计算机图形学》实验报告 实验一直线、圆(弧)生成算法 一、实验目的及要求 1. 了解光栅图形显示器的工作原理和特点; 2. 学习C/VC环境下的基本绘图方法; 3. 实践与巩固直线的基本生成算法。 4. 掌握直线扫描转换算法的原理及实现; 5. 学习圆(弧)的基本生成算法; 6. 实践圆(弧)的基本生成算法; 7. 掌握圆弧扫描转换算法的原理及实现; 二、理论基础 1、有关直线生成算法有 DDA(数值微分)、中点画线线算法、Bresenham生成算法数值微分法先算出直线的斜率,然后从起点开始,确定最佳逼近于直线的y坐标。假设起点的坐标为整数。让x递增1,y相应递增k。 中点划线算法中若直线在x方向增加一个单位,y的增量只能在0、1之间。假设当前像素点已经确定,下一像素点就只可能有两种情况,

将这两点的中点带入直线方程中,通过中点在直线的上、下方来判断下一点的坐标。 Bresenham算法是通过各行、各列像素中心构造一组虚拟网络格线,按直线从起点到中点的顺序计算直线与各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。 2、有关画圆的算法 圆的扫描转换(中点画圆法)、Bresenham画圆算法圆的扫描转换算法同中点画线类似,将圆分为8份,先讨论圆的第一象限上半部分,从(0,R)点顺时针确定最佳逼近于该圆弧的像素序列。之后通过对称画出全部圆。 Bresenham画圆算法考虑圆在第一象限上的点,每确定一像素,则下一像素有三种可能,通过判断右下方的像素与圆的位置关系再分为三种情况,之后通过这三个点与圆的距离远近确定最佳逼近像素。 三、算法设计与分析 1、数值微分法 int x0=0,y0=0,x1=800,y1=400; //数值微分法,|k|<=1 float dx,dy,k,x,y; dx=x1-x0; dy=y1-y0; k=dy/dx;

计算机图形学实验二:画圆

贵州大学实验报告 学院:计算机科学与技术专业:计算机科学与技术班级:计科131

P i (x i

float d; x = 0; y = radius; d = 5 - 4 * radius; float deltaE = 12; float deltaSE = 20 - 8 * radius; glColor3f(0.0, 1.0, 0.0); glVertex2i(x, y); while (y>x) { if (d <= 0) { d += deltaE; deltaSE += 8; } else { d += deltaSE; deltaSE += 16; y--; } deltaE += 8; x++; glColor3f(0.0, 1.0, 0.0); glVertex2i(x, y); glColor3f(0.5, 1.0, 0.0); glVertex2i(x, -y); glColor3f(1.0, 1.0, 0.0); glVertex2i(-x, y); glColor3f(1.0, 0.0, 0.0); glVertex2i(-x, -y); glColor3f(0.0, 1.0, 1.0); glVertex2i(y, x); glColor3f(0.0, 0.0, 1.0); glVertex2i(y, -x); glColor3f(1.0, 0.0, 1.0); glVertex2i(-y, x); glColor3f(0.0, 1.0, 0.5); glVertex2i(-y, -x); } } /*

画椭圆 */ void myDisplayEllipse(void) { glClear(GL_COLOR_BUFFER_BIT);// 清除 glBegin(GL_LINES); for (int i = 0; i < 360; i++) { //convert degrees into radians float degInRad = i*DEG2RAD; glVertex2f(cos(degInRad)*xradius, sin(degInRad)*yradius); } glEnd(); glFlush();//保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)} void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); //清屏 glBegin(GL_LINES); for (int i = 0; i < 360; i++) { //convert degrees into radians float degInRad = i*DEG2RAD; glVertex2f(cos(degInRad)*xradius, sin(degInRad)*xradius); } glEnd(); glFlush(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); //固定格式 glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowSize(500, 500); //显示框的大小 glutInitWindowPosition(400, 200); //确定显示框左上角的位置 printf("输入你想画的圆 0代表中点圆 1代表椭圆\n"); int choice; while (1) { scanf("%d", &choice); switch (choice) { case 0: glutCreateWindow("画圆");

相关文档
最新文档