计算机图形学画圆方法

计算机图形学画圆方法
计算机图形学画圆方法

计算机图形学画圆方法

部门: xxx

时间: xxx

整理范文,仅供参考,可下载自行编辑

浙江大学城市学院实验报告

课程名称计算机图形学

实验工程名称画圆方法

实验成绩指导老师<签名)日期

一. 实验目的和要求

通过实验加深对Bresenham圆生成算法的理解。

二. 实验内容和原理

(1)数据输入项<或者函数参数)为:圆心坐标与半径

(2)输出圆。

三. 实验设计与分析

Besenham圆

①创建一个application,将其全部保存,

②双击划圆按扭,定义参数如下:

x,y,x0,y0,r,direction : integer。

delta,delta1,delta2 : integer。

color1 : integer。

③编写代码如下

if self.Edit1.Text = '' then

begin

Application.MessageBox('圆心坐标X没有输入!','提示',0>。

abort。

end

else if self.Edit2.Text = '' then

begin

Application.MessageBox('圆心坐标Y没有输入!','提示',0>。

abort。

end

else if self.Edit3.Text = '' then

begin

Application.MessageBox('圆半径没有输入!','提示',0>。

abort。

end

else

x0:= strtoint(Edit1.Text>。

y0:=strtoint(Edit2.Text>。

r:=strtoint(Edit3.Text>。

x:=0。

y:=r。

delta:=2*(1-r>。

color1:= clGreen。

while y>=0 do

begin

image1.canvas.Pixels[x0+x,y0+y]:=color1。 image1.canvas.Pixels[x0-x,y0+y]:=color1。 image1.canvas.Pixels[x0+x,y0-y]:=color1。 image1.canvas.Pixels[x0-x,y0-y]:=color1。 if delta<0 then

begin

delta1:=2*(delta+y>-1。

if delta1<=0 then direction:=1

else direction:=2。

end

else if delta>0 then

begin

delta2:=2*(delta-x>-1。

if delta2<=0 then direction:=2

else direction:=3。

end

else

direction:=2。

case direction of

1 : begin

inc(x>。

delta:=delta+2*x+1。

end。

2 : begin

inc(x>。

dec(y>。

delta:=delta+2*(x-y+1>。

end。

3 : begin

dec(y>。

delta:=delta+(-2*y+1>。

end。

end。

end。

end。

④双击演示按扭,定义参数如下:

x,y,x0,y0,r,direction : integer。

delta,delta1,delta2 : integer。

color1 : integer。

⑤编写代码如下

if self.Edit1.Text = '' then

begin

Application.MessageBox('圆心坐标X没有输入!','提示',0>。

abort。

end

else if self.Edit2.Text = '' then

begin

Application.MessageBox('圆心坐标Y没有输入!','提示',0>。

abort。

end

else if self.Edit3.Text = '' then

begin

Application.MessageBox('圆半径没有输入!','提示',0>。

abort。

end

else

x0:= strtoint(Edit1.Text>。

y0:=strtoint(Edit2.Text>。

r:=strtoint(Edit3.Text>。

x:=0。

y:=r。

delta:=2*(1-r>。

color1:= clGreen。

while y>=0 do

begin

image1.canvas.Pixels[x0+x,y0+y]:=color1。 image1.canvas.Pixels[x0-x,y0+y]:=color1。 image1.canvas.Pixels[x0+x,y0-y]:=color1。 image1.canvas.Pixels[x0-x,y0-y]:=color1。 if delta<0 then

begin

delta1:=2*(delta+y>-1。

if delta1<=0 then direction:=1

else direction:=2。

end

else if delta>0 then

begin

delta2:=2*(delta-x>-1。

if delta2<=0 then direction:=2

else direction:=3。

end

else

direction:=2。

case direction of

1 : begin

inc(x>。

delta:=delta+2*x+1。

end。

2 : begin

inc(x>。

dec(y>。

delta:=delta+2*(x-y+1>。

end。

3 : begin

dec(y>。

delta:=delta+(-2*y+1>。

end。

end。

end。

⑥双击退出按扭,编写代码如下:

Close;

⑦双击清屏按扭,编写代码如下:

image1.Canvas.Brush.Color:=clwhite。

image1.Canvas.FillRect(Rect(0,0,350,250>>。

Form3.Edit1.Clear。

Form3.Edit2.Clear。

Form3.Edit3.Clear。

⑧保存,完成。

四. 实验结果与分析

五. 讨论、心得

记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。

申明:

所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。

计算机图形学基础教程习题课1第二版孙家广胡事民编著

1.列举计算机图形学的主要研究内容。 计算机中图形的表示方法、图形的计算、图形的处理和图形的显示。 图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。 2.常用的图形输出设备是什么? 显示器(CRT、LCD、等离子)、打印机、绘图仪等。 2.常用的图形输入设备是什么? 键盘、鼠标、跟踪球、空间球、数据手套、光笔、触摸屏、扫描仪等。 3.列出3种图形软件工具。 AutoCAD、SolidWorks、UG、ProEngineer、CorelDraw、Photoshop、PaintShop、Visio、3DMAX、MAY A、Alias、Softimage等。 错误:CAD 4.写出|k|>1的直线Bresenham画线算法。 d d d d 设直线方程为:y=kx+b,即x=(y-b)/k,有x i+1=x i+(y i+1-y i)/k = x i+1/k,其中k=dy/dx。因为直线的起始点在象素中心,所以误差项d的初值d0=0。y下标每增加1,d的值相应递增1/k,即d=d+1/k。一旦d≥1,就把它减去1,这样保证d在0、1之间。 ●当d≥0.5时,最接近于当前象素的右上方象素(x i+1,y i+1),x方向加1,d减 去1; ●而当d<0.5时,更接近于上方象素(x i,y i+1)。 为方便计算,令e=d-0.5,e的初值为-0.5,增量为1/k。

●当e≥0时,取当前象素(x i,y i)的右上方象素(x i+1,y i+1),e减小1; ●而当e<0时,更接近于上方象素(x i,y i+1)。 void Bresenhamline (int x0,int y0,int x1, int y1,int color) { int x, y, dx, dy; float k, e; dx = x1-x0, dy = y1-y0, k=dy/dx; e=-0.5, x=x0, y=y0; for (i=0; i≤dy; i++) { drawpixel (x, y, color); y=y+1,e=e+1/k; if (e≥0) { x++, e=e-1;} } } 4.写出|k|>1的直线中点画线算法。 构造判别式:d=F(M)=F(x p+0.5,y p+1)=a(x p+0.5)+b(y p+1)+c ●当d<0,M在Q点左侧,取右上方P2为下一个象素; ●当d>0,M在Q点右侧,取上方P1为下一个象素; ●当d=0,选P1或P2均可,约定取P1为下一个象素; 增量计算: ●若d≥0,取正上方象素P1 (x p, y p+1),要判下一个象素位置,应计算

图形与可视化 实验大纲

《图形与可视化》课程实验教学大纲 编号: 课程总学时:64 实验学时:24 课程总学分:3.5 实验学分:(非单独设课的实验不用填此项) 先修课程:线性代数、C++与OO程序设计 适用专业:计算机科学与技术 一、本课程实验的主要目的与任务 《图形与可视化》是计算机科学与技术专业本科教学中的一门重要的专业课。通过本课程的教学,帮助学生掌握图形与可视化的基础知识,了解该学科的前沿科技,并能运用图形软件包OpenGL,进行简单的图像处理软件代码设计。 《图形与可视化》是一门理论性和应用性很强的课程。开设实验课程有助于加深学生对图形算法的理解,培养其分析问题,解决问题的能力。 通过本课程实验要求学生基本达到如下要求: 1. 掌握OpenGL的基本语法与程序结构。 2. 掌握如何通过点、线、面、体的构造方法。 3. 掌握如何对三维物体增加光照和纹理来增强其真实感。 4. 掌握如何构建一个真实的三维场景的基本过程和实现方法。 二、本课程实验应开设项目 三、各实验项目主要实验内容和基本要求 实验1 直线绘制算法( 4学时) 1.实验目的 (1) 了解OpenGL的基本的编程思想和程序结构。 (2) 了解OpenGL中绘制点、线、面的相关函数。 (3) 掌握如果通过定义空间点和构成方式来形成不同的空间物体。

2.实验内容 (1) 熟悉实验环境。 (2) 利用相关直线绘制算法绘制一条直线,建议使用DDA算法或Bresenham算法。 (3) 绘制一个颜色插值的三角形面。 (4) 综合利用所学知识,绘制分形物体。给出原理,步骤,设计绘制方案。可自己选择分形物体的类型,如分形树、Koch雪花、Sierpinski三角形(二维或三维)、Julia集、Mandelbrot集等。 3.实验要求 (1) 预习实验相关知识,了解实验目的与内容。 (2) 根据实验目的和内容,制定相关的实验方案并进行实施。 (3) 实验结束后,对相关内容进行总结和反思。 4.实验器材 (1) PC机及配套软件、一人一套。 实验2 曲线与曲面(4学时) 1.实验目的 (1) 掌握Bezier曲线和Hermite曲线的绘制方法。理解如何通过折线来近似一条曲线。 (2) 了解Bezier曲面和Hermite曲面的绘制方法。 2.实验内容 (1) 绘制一条四阶Bezier曲线或者Hermite曲线。 (2) 要求控制点、控制多边形、Bezier曲线或Hermite曲线用不同颜色表示。 (3) 掌握如何控制点、线的属性。 (4) 要求有能力的同学能够实现Bezier曲面或者Hermite曲面。 (5) 了解Utah茶壶的Bezier曲面构造方法。 3.实验要求 (1) 预习实验相关知识,了解实验目的与内容。 (2) 根据实验目的和内容,制定相关的实验方案并进行实施。 (3) 实验结束后,对相关内容进行总结和反思。 4.实验器材 (1) PC机及配套软件、一人一套。 实验3 体的表示与变换( 4学时) 1.实验目的 (1) 掌握三维形体的数据表示与存储。 (2) 掌握二维和三维几何变换的矩阵形式。 (3) 掌握视图变换的矩阵表达。 (4) 理解世界坐标系与观察坐标系的相对关系。 (5) 理解几何变换的实质是矩阵操作。 (6) 掌握平行投影、透视投影。 (7) 隐藏面消除、深度测试的基本原理。 (8) 使用多边形网格建模并进行变换。 2.实验内容

计算机图形学正负法画圆

计算机图形学试验报告(六) 试验名称:利用正负法画圆 专业:地理信息系统班级: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);

信息可视化与其发展(计算机图形学)

《计算机图形学》(课程编号:0882438)2009 - 2010 学年第 3学期 大作业 学院: 学号: 姓名: 成绩: 2010 年 6 月25 日

信息可视化技术的发展与应用可视化是指在人通过视觉观察并在头脑中形成客观事物的影像的过程,这是一个心智处理过程。可视化提高了人对事物的观察能力及整体概念的形成等。可视化结果便于人的记忆和理解,同时其对于信息的处理和表达方式有其他方法无法取代的优势。可视化技术以人们惯于接受图形、图像并辅以信息处理技术将客观事物及其内在的联系表现出来。可视化不仅是客观现实的形象再现,也是客观规律、知识和信息的有机融合。它的应用范围很广,主要有: (1)科学计算可视化 科学计算可视化是指空间数据场的可视化,它是用计算机图形学和图像处理技术,将科学计算过程中产生的数据及计算结果转换为图形或图像在屏幕上显示出来并进行交互处理的理论、方法和技术。其应用有: a)科学计算可视化在电网调度系统中的应用 电网调度一方面需要对其进行持续有力的分析与处理。另一方面,传统的仿真研究形式也需要加以改进,以方便对数学模型的调整并加深研究者对仿结果的理解,从而揭示电网运行的内在规律。当电力系统中各种发电、变电、输配电及用电设备之间的相互联结关系情况已经确定时,电力系统运行状态的描述通常是通过反映例如电压、功率、电流等变量的数值来实现的。由于科学计算可视化技术在大量信息的抽象综合、系统总体状况表示方面的优点,因此在电网调度力系统实时监视方面能够开展很好的应用,这些应用包括利用等高线技术监视电压等、动画潮流技术监视线路流动功率等、饼图技术监视线路(变压器)负载率等、三维交互技术用来监视多个信息(例如电压和功率)

案例2-直线中点Bresenham算法

课程实验报告

步骤 为了规范颜色的处事,定义了CRGB类,重载了“+”,“-”、“*”、“\”、“+=”、“-=”、“*=”、“/=”运算符。成员函数Normalize()将颜色分量red,green,blue规范到[0,1]闭区间内。 RGB.h #pragma once class CRGB { public: CRGB(); CRGB(double, double, double); ~CRGB(); friend CRGB operator + (const CRGB&, const CRGB&); friend CRGB operator - (const CRGB&, const CRGB&); friend CRGB operator * (const CRGB&, const CRGB&); friend CRGB operator * (const CRGB&, double); friend CRGB operator * (double, const CRGB&); friend CRGB operator / (const CRGB&, double); friend CRGB operator += (const CRGB&, const CRGB&); friend CRGB operator -= (const CRGB&, const CRGB&); friend CRGB operator *= (const CRGB&, const CRGB&); friend CRGB operator /= (const CRGB&, double); void Normalize(); public: double red; double green; double blue; }; RGB.cpp #include"stdafx.h" #include"RGB.h" CRGB::CRGB() { red = 1.0; green = 1.0; blue = 1.0;

圆的认识与画圆练习

圆的认识与画圆练习 教学内容:青岛版数学六年级上册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)圆的直径就是圆的对称轴。()

计算机图形学试题及答案(汇总)

一、 判断题(10x1=10分) 1、 构成图形的要素可分为两类:刻画形状的点、线、面、体的非几何要素(集合要素)与反映物体表面属性或材质 的明暗、色彩等的(非几何要素)几何要素。( 错误 ) 2、 参数法描述的图形叫图形;点阵法描述的图形叫图像。( 正确 ) 3、 EGA (增强图形适配器)/VGA (视频图形阵列)为增强图形显示效果的一种图形处理软件的名称。( 错误 ) 4、 对山、水等不规则对象进行造型时,大多采用过程式模拟方法。( 正确 ) 5、 若两个图形是拓扑等价的,则一个图形可通过做弹性运动与另一个图形相重合。( 正确 ) 6、 0阶参数连续性和0阶几何连续性的定义是相同的。( 正确 ) 7、 Bezier 曲线可做局部调整。( 错误 ) 8、 字符的图形表示分为点阵和矢量两种形式。( 正确 ) 9、 LCD 表示(液晶显示器)发光二极管显示器。( 错误 ) 10、 使用齐次坐标可以将n 维空间的一个点向量唯一的映射到n+1维空间中。( 错误 ) 二、 填空题(15x2=30分) 1、目前常用的PC 图形显示子系统主要由3个部件组成:(1)帧缓冲存储器、(2)显示控制器、(3)ROM BIOS 。 2、 图形的输入设备有(4)键盘、鼠标、光笔(至少写三种);图形的显示设备有(5)CRT 显示器、LCD 、投影仪(至少写三种)。 3、常用坐标系一般可以分为:建模坐标系、用户坐标系、(6观察坐标系、(7)规格化设备坐标系、(8)设备坐标系。 4、在多边形的扫描转换过程中,主要是通过确定穿越多边形区域的扫描线的覆盖区间来填充,而区域填充则是从(9)给定的位置开始涂描直到(10)指定的边界条件为止。 5、一个交互式计算机图形系统应具有(11)计算 、(12)存储、(13)对话、(14)输入和输出等五个方面的功能。 三、 简答题(5x6=30分) 1、 请列举常用的直线段裁减算法(四种)。 答:答:直接求交算法、编码算法、中点再分算法、Cyrus-Beck 算法。 2、 考虑三个不同的光栅系统,分辨率依次为480640?,10241280?,20482560?。欲存储每个像素12位, 这些系统各需要多大的帧缓冲器(字节数)? 答:480640?需要的帧缓存为KB 4508/12480640=?? 10241280?需要的帧缓存为KB 19208/1210241280=?? 20482560 ?需要的帧缓存为KB 76808/1220482560=?? 3、 什么叫做走样?什么叫做反走样?反走样技术包括那些? 答:走样指的是用离散量表示连续量引起的失真。 为了提高图形的显示质量。需要减少或消除因走样带来的阶梯形或闪烁效果,用于减少或消除这种效果的方法称为反走样。 其方法是①前滤波,以较高的分辨率显示对象;②后滤波,即加权区域取样,在高于显示分辨率的较高分辨率下用点取样方法计算,然后对几个像素的属性进行平均得到较低分辨率下的像素属性。 4、 试说明一致缩放(s x =s y )和旋转形成可交换的操作对。 答:????? ??? ??-=???????? ??-????????? ??=1000cos sin 0sin cos 1000cos sin 0sin cos 10 00 001θθθθ θθθθ y y x x y x s s s s s s T ???? ???? ? ?-=??????????????????? ??-=10 00cos sin 0sin cos 10 000010 00cos sin 0sin cos 2θθθθθθ θθ y x y x y x s s s s s s T

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

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

(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个坐标

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

计算机图形学实验 圆、椭圆的中点算法 学院:计算机科学与技术学院专业:软件工程 班级:软工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 中点画线和Bresenham画线算法的实现

计算机图形学实验报告 实验1 使用画线算法,绘制直线段 一.实验目的及要求 (1)掌握图形学中常用的三种画线算法:数值微分法、中点画线法和Bresenham画线算法。 (2)掌握绘制直线的程序设计方法。 (3)掌握使用文件来保存直线段的方法。 (4)掌握从文本文件中恢复出直线的方法。 二.实验内容 使用VC++ 6.0开发环境,分别实现中点画线算法和Bresenham画线算法,绘制直线(注意,不能使用VC中已有的绘制直线的函数),并以文本文件的形式保存绘制的结果,可以从文本文件中恢复出以前绘制过的直线。 三.算法设计与分析 Bresenham算法绘制直线的程序(仅包含整数运算)。 void MidBresenhamLine(int x0,int y0,int x1,int y1,int color) { int dx,dy,d,UpIncre,DownIncre,x,y; if(x0>x1){ x=x1;x1=x0;x0=x;

y=y1;y1=y0;y0=y; } x=x0;y=y0; dx=x1-x0;dy=y1-y0; d=dx-2*dy; UpIncre=2*dx-2*dy;DownIncre=-2*dy; while(x<=x1){ putpixel(x,y,color); X++; if(d<0){ y++; d+=UpIncre; } else d+=DownIncre; } } 四.程序调试及运行结果的自我分析与自我评价 // testView.cpp : implementation of the CTestView class #include "stdafx.h" #include "test.h" #include "testDoc.h" #include "testView.h" #include // ifstream、ofstream等位于其中 #include #include // string类型需要 #include "DlgInput.h" //CDlgInput类的头文件 using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // CTestView IMPLEMENT_DYNCREATE(CTestView, CView) BEGIN_MESSAGE_MAP(CTestView, CView) //{{AFX_MSG_MAP(CTestView) ON_COMMAND(ID_MENUITEM32771, OnMenuitem32771) ON_COMMAND(ID_MENUBRESENHAMLINE, OnMenubresenhamline) ON_COMMAND(ID_MENUCLEARVIEW, OnMenuclearview) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND(ID_FILE_SA VE, OnFileSave) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)

圆的画法

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

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

Bresenham算法

Course Page
Page 1 of 6
课程首页 > 第二章 二维图形的生成 > 2.1 直线的生成 > 2.1.2 生成直线的Bresenham算法
全部隐藏
2.1.2 生成直线的Bresenham算法
从上面介绍的DDA算法可以看到,由于在循环中涉及实型数据的加减运算,因此直线的生成速度较慢。 在生成直线的算法中,Bresenham算法是最有效的算法之一。Bresenham算法是一种基于误差判别式来生成直线的方法。 一、直线Bresenham算法描述: 它也是采用递推步进的办法,令每次最大变化方向的坐标步进一个象素,同时另一个方向的坐标依据误差判别式的符号来决定是否也要步进一 个象素。 我们首先讨论m=△ y/△x,当0≤m≤1且x1有两种Bresenham算法思想,它们各自从不同角度介绍了Bresenham算法思想,得出的误差判别式都是一样的。 二、直线Bresenham算法思想之一: 由于显示直线的象素点只能取整数值坐标,可以假设直线上第i个象素点坐标为(xi,yi),它是直线上点(xi,yi)的最佳近似,并且xi=xi(假设 m<1),如下图所示。那么,直线上下一个象素点的可能位置是(xi+1,yi)或(xi+1,yi+1)。
由图中可以知道,在x=xi+1处,直线上点的y值是y=m(xi+1)+b,该点离象素点(xi+1,yi)和象素点(xi+1,yi+1)的距离分别是d1和d2:
d1=y-yi=m(xi+1)+b-yi d2=(yi+1)-y=(yi+1)-m(xi+1)-b 这两个距离差是 d1-d2=2m(xi+1)-2yi+2b-1
(2-8) (2-9)
(2-10)
我们来分析公式(2-10): (1)当此值为正时,d1>d2,说明直线上理论点离(xi+1,yi+1)象素较近,下一个象素点应取(xi+1,yi+1)。 (2)当此值为负时,d1mhtml:file://C:\Documents and Settings\Administrator\桌面\Course Page.mht
2011-7-12

画圆的方法

一、画圆的方法: 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、绳测法。用绳绕圆片一周,剪去多余的绳子,量出绳子的长度就是这个圆片的周长。

Vtk(Visualization Toolkit)-开放资源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化

Vtk(Visualization Toolkit)-开放资源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化 Vtk(Visualization Toolkit)-开放资源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化,在面向对象原理的基础上设计和实现的内核用C++构建,包含有大约 250 000行代码,650多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk 和Python各种语言使用Vtk。 学术术语来源--- 三维可视化系统对髋关节骨性结构的评价 文章亮点: 1 实验设计所涉及的软件使用了成熟的MC算法,采用VC6.0++及VTK软件编译完成。 2 软件体积小,具有便捷的可移动性,可实现使用DICOM数据重建骨骼三维模型的功能,产生的模型较为真实,可以使用旋转、缩放、移动等操作进行多方位观察,对临床复杂型骨折有一定参考价值。 3 后期可通过改进算法、增加功能来改善软件的使用体验。 关键词: 植入物|数字化骨科|VC++6.0|VTK|医学三维可视化系统|MC算法 主题词: 软件;成像,三维;算法;人机系统 摘要 背景:目前通过二维断层图像信息来判断病变组织的具体性状其难度仍然较大,而运用医学三维重建技术,将能够显著改善医务工作者对相关疾病诊断的工作效率和准确率。目的:开发一套医学三维可视系统,能够通过读取髋关节DICOM数据重建相应部位三维模型,并通过重建模型直观观察病变髋关节的形态。 方法:使用个人电脑在WindowsXP操作系统,开发环境为VC++6.0,安装VTK 5.6并进行必要设置,使用MFC开发一套医学三维可视化系统,具体步骤如下:①创建一个绘制对象。②创建一个绘制窗,将绘制对象加入绘制窗口。③读取CT图像序列,设置读取图像序列的路径。④使用MC算法抽取等值面(生成三角面片),根据灰度的不同,分别从切片数据中提取出皮肤和骨骼。设置输入图像序列数据;设置抽取的组织轮廓线灰度值。

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

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

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

DDA算法 中点画线算法 Bresenham算法

实验1直接绘制实验 (提示:#表示Project的编号,##表示Project题目) 学号姓名上交时间 1.问题描述 如何利用OpenGL实现直线光栅化的DDA算法、中点画线算法和Bresenham算法2.算法描述 DDA算法:据直线公式y = kx + b来推导出来的,其关键之处在于如何设定单位步进,即一个方向的步进为单位步进,另一个方向的步进必然是小于1。 中点划线法:在画直线段的过程中,当前像素点为(xp ,yp ),下一个像素点有两种可选择点P1(xp +1,yp )或P2(xp +1,yp +1)。若M=(xp +1,yp +0.5)为P1与P2之中点,Q 为P理想直线与x=xp +1垂线的交点。当M在Q的下方,则P2应为下一个像素点; M在Q的上方,应取P1为下一个像素点。 Bresenham算法:过各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近 的像素。 实验结果 成功运行三个算法,并且能转换出通用Bresenham算法。 3.分析与评论 (分析每个算法的运行时间,对你的本实验的工作进行评论,同时也可以对老师提出建议。) 附录: Source Code(in C)

#include //需要正确安装GLUT,安装方法如预备知识中所述void myDisplay(void) { glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glColor3f (1.0f, 1.0f, 1.0f); glRectf(-0.5f, -0.5f, 0.5f, 0.5f); glBegin (GL_TRIANGLES); glColor3f (1.0f, 0.0f, 0.0f); glVertex2f (0.0f, 1.0f); glColor3f (0.0f, 1.0f, 0.0f); glVertex2f (0.8f, -0.5f); glColor3f (0.0f, 0.0f, 1.0f); glVertex2f (-0.8f, -0.5f); glEnd (); glColor3f(1,0,0); glBegin(GL_LINE_LOOP); glVertex2f (0.0f, 0.5f); glVertex2f (0.4f, -0.25f); glVertex2f (-0.4f, -0.25f); glEnd (); glPointSize(3); glBegin (GL_POINTS); glColor3f (1.0f, 0.0f, 0.0f); glVertex2f (-0.4f, -0.4f); glColor3f (0.0f, 1.0f, 0.0f); glVertex2f (0.0f, 0.0f); glColor3f (0.0f, 0.0f, 1.0f); glVertex2f (0.4f, 0.4f); glEnd (); glFlush(); } int main(intargc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

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

本技术新型涉及教学领域,尤其涉及一种数学教学用画圆器。本技术新型要解决的技术问题是提供一种不会对黑板造成损坏、画圆时不会偏移位置的数学教学用画圆器。为了解决上述技术问题,本技术新型提供了这样一种数学教学用画圆器,包括有第一支杆等;第一支杆左侧后部连接有第一轴承座,第一轴承座上连接有第一转杆,第一转杆与第一支杆连接,第一轴承座左侧连接有橡胶柱,橡胶柱左侧连接有吸盘,第一支杆左侧前部连接有夹紧装置。本技术新型通过让吸盘吸在黑板上作图,这样能够达到教师在黑板上画图时,不损坏黑板的目的,并且设置有夹紧装置和移动装置的缘由。 技术要求 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)。

计算机图形学

计算机图形学模拟试题一 1、举例说明计算机图形学的主要应用领域(至少说明5个应用领域) 计算机及辅助设计与制造、可视化、图形实时绘制与自然景物仿真、计算机动画、用户接口、计算机艺术 2、分别解释直线生成算法DDA法、中点画线法和Bresenham法的基本原理。 DDA法:设过端点P0(x0 ,y0)、P1(x1 ,y1)的直线段为L(P0 ,P1),则直线段L的斜率 L 的起点P0的横坐标x0向L的终点P1的横坐标x1步进,取步长=1(个象素),用L的直线方程y=kx+b计算相应的y坐标,并取象素点(x,round(y))作为当前点的坐标。因 为: y i+1 = kx i+1+b= k1x i+b+kDx = y i+kDx所以,当Dx =1; y i+1 = y i+k。也就是说,当x每递增1,y递增k(即直线斜率)。 假定直线斜率k在0~1之间,当前象素点为(x p,y p),则下一个象素点有两种可选择点P1(x p+1,y p)或P2(x p+1,y p+1)。若P1与P2的中点(x p+1,y p+0.5)称为M,Q为理想直线与x=x p+1垂线的交点。当M在Q的下方时,则取P2应为下一个象素点;当M在Q的上方时,则取P1为下一个象素点。这就是中点画线法的基本原理。 Bresenham法的基本原理:过各行各列象素中心构造一组虚拟网格线。按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定该列象素中与此交点最近的象素。该算

法的巧妙之处在于采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列的所求象素。 3、什么是反走样?常用的反走样方法有哪三种? 在光栅图形中,非水平和垂直的直线用象素集合表示时,会呈锯齿状,这种现象称之为走样。反走样方法:提高分辨率、区域采样、加权区域采样。 4、与显式、隐式方程表示曲线、曲面相比,参数方程法有哪些优势? 求导方便,不会出现计算上的困难。参数方程中,代数、几何相关和无关的变量是完全分离的,而且对变量个数不限,从而便于用于把低维空间的曲线、曲面扩展到高维空间去。这种变量分离的特点使可以用数学公式处理几何分量。 5、什么是光照模型?举两个简单光照模型的例子。 光照模型:为模拟这一现象,我们建立一些数学模型来替代复杂的物理模型,这些模型就称为简单光照明模型。Phong光照明模型、增量式光照明模型 计算机图形学模拟试题二 6、举例说明真实感图形实时绘制与自然景物仿真方面的前沿研究内容。 计算机及辅助设计与制造、可视化、图形实时绘制与自然景物仿真、计算机动画、用户接口、计算机艺术 7、解释中点画圆法的基本原理。

相关文档
最新文档