计算机图形学画一个位于屏幕中央的奥运五环图标的代码

奥运五环的代码:

/**

* @(#)yuan.java

*

*

* @author

* @version 1.00 2015/4/16

*/

import java.awt.*;

public class yuan extends java.applet.Applet {

private int r,x,y;

private int d;

public void paint(Graphics g) {

r=100; x=0; y=r; d=5/4 - r;

Dimension dim=getSize();

int w=dim.width;

int h=dim.height;

while(x<=y){

g.setColor(Color.black);

g.drawRect(x+w/2,y+h/2,1,1);

g.drawRect(x+w/2,-y+h/2,1,1);

g.drawRect(-x+w/2,y+h/2,1,1);

g.drawRect(-x+w/2,-y+h/2,1,1);

g.drawRect(y+w/2,x+h/2,1,1);

g.drawRect(y+w/2,-x+h/2,1,1);

g.drawRect(-y+w/2,x+h/2,1,1);

g.drawRect(-y+w/2,-x+h/2,1,1);

g.setColor(Color.blue);

g.drawRect(x+w/2-2*r-10,y+h/2,1,1); g.drawRect(x+w/2-2*r-10,-y+h/2,1,1);

g.drawRect(-x+w/2-2*r-10,y+h/2,1,1);

g.drawRect(-x+w/2-2*r-10,-y+h/2,1,1);

g.drawRect(y+w/2-2*r-10,x+h/2,1,1); g.drawRect(y+w/2-2*r-10,-x+h/2,1,1);

g.drawRect(-y+w/2-2*r-10,x+h/2,1,1);

g.drawRect(-y+w/2-2*r-10,-x+h/2,1,1);

g.setColor(Color.yellow);

g.drawRect(x+w/2-r-10,y+h/2+r,1,1);

g.drawRect(x+w/2-r-10,-y+h/2+r,1,1);

g.drawRect(-x+w/2-r-10,y+h/2+r,1,1);

g.drawRect(-x+w/2-r-10,-y+h/2+r,1,1);

g.drawRect(y+w/2-r-10,x+h/2+r,1,1); g.drawRect(y+w/2-r-10,-x+h/2+r,1,1);

g.drawRect(-y+w/2-r-10,x+h/2+r,1,1);

g.drawRect(-y+w/2-r-10,-x+h/2+r,1,1);

g.setColor(Color.green);

g.drawRect(x+w/2+r,y+h/2+r,1,1);

g.drawRect(x+w/2+r,-y+h/2+r,1,1);

g.drawRect(-x+w/2+r,y+h/2+r,1,1);

g.drawRect(-x+w/2+r,-y+h/2+r,1,1);

g.drawRect(y+w/2+r,x+h/2+r,1,1);

g.drawRect(y+w/2+r,-x+h/2+r,1,1);

g.drawRect(-y+w/2+r,x+h/2+r,1,1);

g.drawRect(-y+w/2+r,-x+h/2+r,1,1);

g.setColor(Color.red);

g.drawRect(x+w/2+2*r+10,y+h/2,1,1);

g.drawRect(x+w/2+2*r+10,-y+h/2,1,1);

g.drawRect(-x+w/2+2*r+10,y+h/2,1,1);

g.drawRect(-x+w/2+2*r+10,-y+h/2,1,1);

g.drawRect(y+w/2+2*r+10,x+h/2,1,1); g.drawRect(y+w/2+2*r+10,-x+h/2,1,1);

g.drawRect(-y+w/2+2*r+10,x+h/2,1,1);

g.drawRect(-y+w/2+2*r+10,-x+h/2,1,1);

if(d<0)

d+=x*2+3;

else{

d+=2*(x-y)+5;

y--;

}

x++;

}

}

}

计算机图形学实验一

实验一二维基本图元的生成与填充 实验目的 1.了解并掌握二维基本图元的生成算法与填充算法。 2.实现直线生成的DDA算法、中点算法和Bresenham算法。 3.实现圆和椭圆生成的DDA和中点算法, 对几种算法的优缺点有感性认识。 二.实验内容和要求 1.选择自己熟悉的任何编程语言, 建议使用VC++6.0。 2.创建良好的用户界面,包括菜单,参数输入区域和图形显示区域。 3.实现生成直线的DDA算法、中点算法和Bresenham算法。 4.实现圆弧生成的中点算法。 5.实现多边形生成的常用算法, 如扫描线算法,边缘填充算法。 6.实现一般连通区域的基于扫描线的种子填充算法。 7.将生成算法以菜单或按钮形式集成到用户界面上。 8.直线与圆的坐标参数可以用鼠标或键盘输入。 6. 可以实现任何情形的直线和圆的生成。 实验报告 1.用户界面的设计思想和框图。 2.各种实现算法的算法思想。 3.算法验证例子。 4.上交源程序。 直线生成程序设计的步骤如下: 为编程实现上述算法,本程序利用最基本的绘制元素(如点、直线等),绘制图形。如图1-1所示,为程序运行主界面,通过选择菜单及下拉菜单的各功能项分别完成各种对应算法的图形绘制。 图1-1 基本图形生成的程序运行界面 2.创建工程名称为“基本图形的生成”单文档应用程序框架

(1)启动VC,选择“文件”|“新建”菜单命令,并在弹出的新建对话框中单击“工程”标签。 (2)选择MFC AppWizard(exe),在“工程名称”编辑框中输入“基本图形的生成”作为工程名称,单击“确定”按钮,出现Step 1对话框。 (3)选择“单个文档”选项,单击“下一个”按钮,出现Step 2对话框。 (4)接受默认选项,单击“下一个”按钮,在出现的Step 3~Step 5对话框中,接受默认选项,单击“下一个”按钮。 (5)在Step 6对话框中单击“完成”按钮,即完成“基本图形的生成”应用程序的所有选项,随后出现工程信息对话框(记录以上步骤各选项选择情况),如图1-2所示,单击“确定”按钮,完成应用程序框架的创建。 图1-2 信息程序基本 3.编辑菜单资源 设计如图1-1所示的菜单项。在工作区的ResourceView标签中,单击Menu项左边“+”,然后双击其子项IDR_MAINFRAME,并根据表1-1中的定义编辑菜单资源。此时VC已自动建好程序框架,如图1-2所示。 表1-1菜单资源表 菜单标题菜单项标题标示符ID 直线DDA算法生成直线ID_DDALINE Bresenham算法生成直线ID_BRESENHAMLINE 中点算法生成直线ID_MIDPOINTLINE 4.添加消息处理函数 利用ClassWizard(建立类向导)为应用程序添加与菜单项相关的消息处理函数,ClassName栏中选择CMyView,根据表1-2建立如下的消息映射函数,ClassWizard会自动完成有关的函数声明。 表1-2菜单项的消息处理函数 菜单项ID消息消息处理函数ID_DDALINE CONMMAN OnDdaline

计算机图形学实验--橡皮筋技术(完整代码,准确无误)

计算机图形学上机实验报告 橡皮筋技术 计算机科学与技术学院 姓名: xxx 完成日期: 2010-12-7

实验:橡皮筋技术 一、实验目的与要求 实验目的:1.学会使用OpenGL,进一步掌握基本图形的绘制方法, 2.理解glut程序框架 3.理解窗口到视区的变换 4.理解OpenGL实现动画的原理 5.学会基于鼠标和键盘实现交互的实现方法 二、实验内容: 利用OpenGL实现折线和矩形的皮筋绘制技术,并采用右键菜单实现功能的选择 实现方法:1.橡皮筋技术的实现采用双缓存技术,绘制图形时分别绘制到两个缓存,交替显示。 2.右键菜单控制选择绘制折线还是绘制矩形,实现方法:通过菜单注册函数创建一个弹出式菜单,然后使用函数加入菜单项,最后使用函数讲菜单与鼠标右键关联起来,GLUT通过为菜单提供一个整数标识符实现对菜单的管理,在main主函数通过标识符用函数指定对应的菜单为当前的菜单。 2. 折线的橡皮筋绘制技术实现:鼠标所在位置确定一个点,移动鼠标时,每次移动时将点的信息保存在数组中,连接当前鼠标所在点和前一个点的直线段。 3.矩形的橡皮筋绘制技术:每个矩形由两个点唯一确定,鼠标当前点为第一个点,移动鼠标确定第二个点的位置,由这两点的坐标绘制出举行的四条边(直线段),矩形即绘制完毕。 三、实验结果

图鼠标右键菜单 图绘制矩形 四、体会 1> 经过这次实验,逐步对opengl软件有了一定的了解,而且对于理论知识有了很好的巩固,并非仅仅会C语言就能编写画图程序,gult程序有自己特殊的框架与实现过程.在这次试验中,虽然没有完全理解其原理,但在一定程度上已经为我们今后的学习应用打下了基础. 2>初步了解了如何在OpenGL实现基本的绘图功能,以及鼠标和键 盘灯交互设备的实现,还有如何由初始生成元绘制分形物体。在这个过 程中遇到了很多问题,程序的调试也是困难重重,通过自己看书思考和 老师、同学的帮助最终完成了程序的调试,在这一过程中加深了对理论 知识的理解,以及理清了理论到实践转换的一点点思路,再一次体会到 理论与实践的结合的重要性,今后要多多提高提高动手能力。

计算机图形学实验

实验1 直线的绘制 实验目的 1、通过实验,进一步理解和掌握DDA和Bresenham算法; 2、掌握以上算法生成直线段的基本过程; 3、通过编程,会在TC环境下完成用DDA或中点算法实现直线段的绘制。实验环境 计算机、Turbo C或其他C语言程序设计环境 实验学时 2学时,必做实验。 实验内容 用DDA算法或Besenham算法实现斜率k在0和1之间的直线段的绘制。 实验步骤 1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序; 3、编辑源程序并进行调试; 4、进行运行测试,并结合情况进行调整; 5、对运行结果进行保存与分析; 6、把源程序以文件的形式提交; 7、按格式书写实验报告。 实验代码:DDA: # include # include

void DDALine(int x0,int y0,int x1,int y1,int color) { int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { putpixel((int)(x+0.5),(int)(y+0.5),4); x+=xIncre; y+=yIncre; } } main(){ int gdriver ,gmode ;

奥运五环思维

奥运“五环”思维 2004雅典的火炬,已经从北京传出,2008年奥运的圣火,将于1500多日后,在北京再次燃起,面对人类4年一次的和平盛会,我们曾经为此付出了许多,回想3年前的7、13,我曾有幸到天安门广场参加了庆祝活动,在此我第一次亲自领略了“普天同庆”的感受。那一天的晚上8点多钟,当广播里宣布江泽民同志等党和国家领导人将要登上天安门城楼,和大家一起欢庆申奥成功时,欢庆的人们,大声喊叫着、欢呼着向天安门城楼方向拥去,此时天安门广场成了欢乐的海洋,沸腾的海洋,个性展示的海洋.精明的商人们,把早已备好的印有申奥标志——―太极五星的小旗和国旗,冰棍瓶水,穿梭贩卖。从那一刻起,标志着中国已经进入了奥运经济的新时代。那么如何顺应奥运经济发展规律,以奥运为商机,开发好奥运产品,搞好奥运产品的营销,就必须转变观念,在深入研究、探索奥运产品营销特征的基础上,对传统营销模式进行大胆的创新,中国企业方能在奥运商战中取得全面的胜利。 奥运产品“五环”营销新思维就是根据奥运产品的特征,将奥运理念、现代营销理论与奥运五环标志合理整合,创新出的一种奥运产品营销新思维,这种思维由奥运理念、产品、

价格、渠道、促销五个环构成,它对促进奥运产品开发,推动奥运产品市场营销具有一定的启迪作用。 一、“五环”营销新思维总构架 “五环”营销新思维主要包括:奥运产品理念环、奥运产品开发环、奥运产品价格环、奥运产品渠道环、奥运产品促销环共五个母环。每一个母环又由五个子环构成。 “五环”营销新思维构图(见图一)。 1、奥运产品理念环:它是奥运产品开发的核心,一切奥运产品不得违背之; 2、奥运产品开发环:它是在传统产品基础上大胆创新的关键,因此只有超常规突破,方能开发出无限市场价值的产品; 3、奥运产品价格环:它是我们突破中华传统“泱泱大国”、“谦谦君子”、“童叟无欺”商道的一个关键环; 4、奥运产品渠道环:它是传统营销渠道的再造,将为企业提供一个构建整合渠道的新思维; 5、奥运产品促销环:它是针对奥运产品营销超常规的营销思路; 二、“五环”营销新思维分解 1、奥运产品理念环:由人文奥运、绿色奥运、科技奥运、奥运规则、法律保护五个子环构成(见图二)。 (1)人文奥运理念子环:它是中国最具优势的理念

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号:2012211632 班级:计算机12-2班 实验地点:逸夫楼507 实验时间:15.04.10 15.04.17

实验一 1 实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力; 编程实现DDA 算法、Bresenham 中点算法;对于给定起点和终点的直线,分别调用DDA 算法和Bresenham 中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel 等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。 2 实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One (自制平台) 3 实验结果 3.1 程序流程图 (1)DDA 算法 是 否 否 是 是 开始 计算k ,b K<=1 x=x+1;y=y+k; 绘点 x<=X1 y<=Y1 绘点 y=y+1;x=x+1/k; 结束

(2)Mid_Bresenham 算法 是 否 否 是 是 是 否 是 否 开始 计算dx,dy dx>dy D=dx-2*dy 绘点 D<0 y=y+1;D = D + 2*dx - 2*dy; x=x+1; D = D - 2*dy; x=x+1; x

3.2程序代码 //-------------------------算法实现------------------------------// //绘制像素的函数DrawPixel(x, y); (1)DDA算法 void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) { //----------请实现DDA算法------------// float k, b; float d; k = float(Y1 - Y0)/float(X1 - X0); b = float(X1*Y0 - X0*Y1)/float(X1 - X0); if(fabs(k)<= 1) { if(X0 > X1) { int temp = X0; X0 = X1; X1 = temp; }

PS多种方法绘制奥运五环

多种方法绘制奥运五环 第一种方法:矢量图形组合法 步骤如下: 1、初始状态设置:新建一个空白画布文件,调出网格或参考线,设置好相关前景色,如图 1设置界面相关环境所示。(提示:相关快捷键有:CTRL + N,CTRL + ’等,注意使用RGB 颜色模式设置五环颜色) 图1设置界面相关环境 2、选择路径工具中的椭圆工具,按住SHIFT绘制一个蓝色圆图形,如图2蓝色图形绘制所 示。(提示:运用网格或水平及垂直参考线方便定位) 图2蓝色图形绘制 3、在椭圆工具属性栏中的形状图层状态下,通过布尔运算中的减去图形方式,运用按住 SHIFT+ALT,以初始绘制的椭圆圆心为同心圆心绘制一个更小的圆形加以减去从而得到一

个圆环,将图层命名为“蓝”方便以后调用图层,如图3绘制蓝圆环所示。(提示:①图中鼠标拖出的同心小圆鼠标左键应该先于快捷键操作结束前,即先松鼠标,后放开快捷键,否则无法得到所需要的效果。其实ALT键也可以实现减圆,但是仅用此键却不能实现减去同心圆,必须与SHIFT配合使用方可。②同心圆半径不要差距大多,即圆环宽度尽可能小些,方便五环成图。) 图3绘制蓝圆环 4、复制蓝图层,先后生成其余四个图层,分别改名为黄、黑、绿、红五个图层,并分别改 色为相应色,如图4五环图案所示排成五环图案。 图4五环图案 5、五环图案虽然绘制好,但是五环相扣的细节没有形成。如何来实现呢?利用布尔运算减 法得到的形状图层可以部分盖住下层圆环实现。首先,来实现蓝环盖住黄环,复制蓝图层,取名“一段蓝”,观察五环相扣,盖住截取圆环段的状态,以免做过多调整,运用

布尔运算减法截出的一段蓝调整到黄图层上一层,放置好位置即可实现盖住效果从而实现蓝黄相扣,如图5蓝环黄环相扣效果所示。 图5蓝环黄环相扣效果 6、依法炮制,黄黑相扣,黑绿相扣,绿红相扣依次完成,最后得到如图6五环相扣最终效 果呈现所示最终效果。 图6五环相扣最终效果呈现

【奥运来了】 奥运五环颜色

【奥运来了】奥运五环颜色 时光荏苒。2001年7月13日,当时任国际奥委会主席萨马兰奇在莫斯科宣布北京获得2008奥运会主办权,全国上下顿时沸腾的那刻起,迄今七年已经匆匆过去。在世界人民“同一个世界,同一个梦想”的伟大向往和美好愿望声中,奥运真的来了。 因为奥运,2008年的中国注定成为世人关注且不平凡的一年。也许正是它的不平凡,2008年伊始,上苍似乎便开始有意无意的在考验着中国。当人们已经隐约听到春的脚步的时候,一向以温暖著称的中国南方,却梦幻般的经历了一场百年不遇的冰雪侵袭――铁路中断、线路损毁。此时适逢春节临近,上千万人被阻隔异乡不能回家;一座座城市失去昔日霓虹璀璨的风采,在冰冷、阴森的黑夜呼号、哭泣…… 正当中国人民以顽强的意志战胜这场冰雪灾害,奥运的身影愈来愈近之时,时针指向5月12日下午2时28分,四川发生8级强烈地震。顷刻间山崩地裂,数百万人家园被毁身受重创;数万人命赴黄泉,梦断期盼已久的2008奥运盛事…… 冰雪无情,大地颤抖,人们不仅要问,2008这是怎么了?中国这是怎么了? 是的,灾难似乎来的太快、太多也太不是时候了。不过,中国政府乃至中国人民在大灾面前已经向世人交出了满意的答卷。多难兴邦,有一个强盛的国家,有一个伟大的民族和坚强不屈的人民,奥运来了亦是必然。故在欢呼奥运来了之时,更要为我们中华民族的伟大和希望而欢呼! 中国准备好了,奥运真的来了。然而地震给四川灾区人民造成的创伤仍然未能抚平,但

愿奥运盛事能带给他们些许慰藉。同时更不能忘记依然战斗在灾区乃至为抗震救灾及灾后重建做出卓越贡献的英雄们,如地震发生之初,携带六十多台重型设备赶赴灾区,被温总理称之为有良心的民营企业家陈光标等。 奥运来了,让我们为刘翔们呐喊助威的同时,更要为陈光标们致敬! 奥运来了,中国向全世界发出邀请――北京欢迎您! 感谢您的阅读!

计算机图形学实验报告 (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))

计算机图形学实验C++代码

一、bresenham算法画直线 #include #include #include void draw_pixel(int ix,int iy) { glBegin(GL_POINTS); glVertex2i(ix,iy); glEnd(); } void Bresenham(int x1,int y1,int xEnd,int yEnd) { int dx=abs(xEnd-x1),dy=abs(yEnd-y1); int p=2*dy-dx; int twoDy=2*dy,twoDyMinusDx=2*dy-2*dx; int x,y; if (x1>xEnd) { x=xEnd;y=yEnd; xEnd=x1; } else { x=x1; y=y1; } draw_pixel(x,y); while(x

} void myinit() { glClearColor(0.8,1.0,1.0,1.0); glColor3f(0.0,0.0,1.0); glPointSize(1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,500.0,0.0,500.0); } void main(int argc,char **argv ) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(200.0,200.0); glutCreateWindow("CG_test_Bresenham_Line example"); glutDisplayFunc(display); myinit(); glutMainLoop(); } 二、中点法绘制椭圆 #include #include #include inline int round(const float a){return int (a+0.5);} void setPixel(GLint xCoord,GLint yCoord) { glBegin(GL_POINTS); glVertex2i(xCoord,yCoord); glEnd(); } void ellipseMidpoint(int xCenter,int yCenter,int Rx,int Ry) { int Rx2=Rx*Rx; int Ry2=Ry*Ry; int twoRx2=2*Rx2; int twoRy2=2*Ry2; int p; int x=0; int y=Ry; int px=0; int py=twoRx2*y; void ellipsePlotPoints(int,int,int,int);

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

一、实验目的 1、掌握中点Bresenham直线扫描转换算法的思想。 2掌握边标志算法或有效边表算法进行多边形填充的基本设计思想。 3掌握透视投影变换的数学原理和三维坐标系中几何图形到二维图形的观察流程。 4掌握三维形体在计算机中的构造及表示方法 二、实验环境 Windows系统, VC6.0。 三、实验步骤 1、给定两个点的坐标P0(x0,y0),P1(x1,y1),使用中点Bresenham直线扫描转换算法画出连接两点的直线。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、使用中点Bresenham直线扫描转换算法实现自己的画线函数,函数原型可表示如下: void DrawLine(CDC *pDC, int p0x, int p0y, int p1x, int p1y); 在函数中,可通过调用CDC成员函数SetPixel来画出扫描转换过程中的每个点。 COLORREF SetPixel(int x, int y, COLORREF crColor ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用DrawLine 函数画出不同斜率情况的直线,如下图:

最后、调试程序直至正确画出直线。 2、给定多边形的顶点的坐标P0(x0,y0),P1(x1,y1),P2(x2,y2),P3(x3,y3),P4(x4,y4)…使用边标志算法或有效边表算法进行多边形填充。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、实现边标志算法或有效边表算法函数,如下: void FillPolygon(CDC *pDC, int px[], int py[], int ptnumb); px:该数组用来表示每个顶点的x坐标 py :该数组用来表示每个顶点的y坐标 ptnumb:表示顶点个数 注意实现函数FillPolygon可以直接通过窗口的DC(设备描述符)来进行多边形填充,不需要使用帧缓冲存储。(边标志算法)首先用画线函数勾画出多边形,再针对每条扫描线,从左至右依次判断当前像素的颜色是否勾画的边界色,是就开始填充后面的像素直至再碰到边界像素。注意对顶点要做特殊处理。 通过调用GDI画点函数SetPixel来画出填充过程中的每个点。需要画线可以使用CDC的画线函数MoveTo和LineTo进行绘制,也可以使用实验一实现的画直线函数。 CPoint MoveTo(int x, int y ); BOOL LineTo(int x, int y ); 实现边标志算法算法需要获取某个点的当前颜色值,可以使用CDC的成员函数 COLORREF GetPixel(int x, int y ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用FillPolygon 函数画出填充的多边形,如下: void CTestView::OnDraw(CDC* pDC) { CTestcoodtransDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

计算机图形学 实验一:生成彩色立方体(含源代码)

实验一 实验目的:生成彩色立方体 实验代码://ColorCube1.java import java.applet.Applet; //可以插入html import java.awt.BorderLayout; //窗口采用BorderLayout方式布局import com.sun.j3d.utils.applet.MainFrame; //application import com.sun.j3d.utils.geometry.ColorCube;//调用生成ColorCube的Utility import com.sun.j3d.utils.geometry.Primitive; import com.sun.j3d.utils.universe.*; //观测位置的设置 import javax.media.j3d.*; //核心类 import javax.vecmath.*; //矢量计算 import com.sun.j3d.utils.behaviors.mouse.*; public class ColorCube1 extends Applet { public BranchGroup createSceneGraph() { BranchGroup objRoot=new BranchGroup(); //BranchGroup的一个对象objRoot(放置背景、灯光)BoundingSphere bounds=new BoundingSphere(new Point3d(0.0,0.0,0.0),100.0);//有效范围 TransformGroup objTrans=new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); objRoot.addChild(objTrans); MouseRotate behavior = new MouseRotate(); behavior.setTransformGroup(objTrans); objRoot.addChild(behavior); behavior.setSchedulingBounds(bounds); MouseZoom behavior2 = new MouseZoom(); behavior2.setTransformGroup(objTrans); objRoot.addChild(behavior2); behavior2.setSchedulingBounds(bounds); MouseTranslate behavior3 = new MouseTranslate(); behavior3.setTransformGroup(objTrans); objRoot.addChild(behavior3); behavior3.setSchedulingBounds(bounds);

计算机图形学画一个位于屏幕中央的奥运五环图标的代码

奥运五环的代码: /** * @(#)yuan.java * * * @author * @version 1.00 2015/4/16 */ import java.awt.*; public class yuan extends java.applet.Applet { private int r,x,y; private int d; public void paint(Graphics g) { r=100; x=0; y=r; d=5/4 - r; Dimension dim=getSize(); int w=dim.width; int h=dim.height; while(x<=y){ g.setColor(Color.black); g.drawRect(x+w/2,y+h/2,1,1); g.drawRect(x+w/2,-y+h/2,1,1); g.drawRect(-x+w/2,y+h/2,1,1); g.drawRect(-x+w/2,-y+h/2,1,1); g.drawRect(y+w/2,x+h/2,1,1); g.drawRect(y+w/2,-x+h/2,1,1); g.drawRect(-y+w/2,x+h/2,1,1); g.drawRect(-y+w/2,-x+h/2,1,1); g.setColor(Color.blue); g.drawRect(x+w/2-2*r-10,y+h/2,1,1); g.drawRect(x+w/2-2*r-10,-y+h/2,1,1); g.drawRect(-x+w/2-2*r-10,y+h/2,1,1); g.drawRect(-x+w/2-2*r-10,-y+h/2,1,1); g.drawRect(y+w/2-2*r-10,x+h/2,1,1); g.drawRect(y+w/2-2*r-10,-x+h/2,1,1); g.drawRect(-y+w/2-2*r-10,x+h/2,1,1);

计算机图形学实验二

实验报告 课程名称:计算机图形学 实验项目:区域填充算法 实验仪器:计算机 系别:计算机学院 专业:计算机科学与技术 班级姓名:计科1602/ 学号:2016011 日期:2018-12-8 成绩: 指导教师:

一.实验目的(Objects) 1.实现多边形的扫描线填充算法。 二.实验内容 (Contents) 实现多边形的扫描线填充算法,通过鼠标,交互的画出一个多边形,然后利用种子填充算法,填充指定的区域。不能使用任何自带的填充区域函数,只能使用画点、画线函数或是直接对图像的某个像素进行赋值操作;

三.实验内容 (Your steps or codes, Results) //widget.cpp //2016CYY Cprogramming #include"widget.h" #include #include #include using namespace std; #define H 1080 #define W 1920 int click = 0; //端点数量 QPoint temp; QPoint first; int result = 1; //判断有没有结束 int sign = 1; //2为画线 int length = 5; struct edge { int ymax; float x; float dx; edge *next; }; edge edge_; QVector edges[H]; QVector points;//填充用 bool fin = false; QPoint *Queue = (QPoint *)malloc(length * sizeof(QPoint)); //存放端点的数组 Widget::Widget(QWidget *parent) : QWidget(parent) { } Widget::~Widget() { } void Widget::mouseMoveEvent(QMouseEvent *event) { setMouseTracking(true); if (click > 0 && result != 0) { startPt = temp; endPt =event->pos(); sign = 2; update(); } } void Widget::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { } else if (event->button() == Qt::RightButton) { sign = 2;

计算机图形学课程教学大纲

《计算机图形学》课程教学大纲一、课程基本信息 课程代码:110053 课程名称:计算机图形学 英文名称:Computer Graphics 课程类别:专业课 学时:72 学分: 适用对象:信息与计算科学专业本科生 考核方式:考试(平时成绩占总成绩的30%) 先修课程:高级语言程序设计、数据结构、高等代数 二、课程简介 中文简介: 计算机图形学是研究计算机生成、处理和显示图形的学科。它的重要性体现在人们越来越强烈地需要和谐的人机交互环境:图形用户界面已经成为一个软件的重要组成部分,以图形的方式来表示抽象的概念或数据已经成为信息领域的一个重要发展趋势。通过本课程的学习,使学生掌握计算机图形学的基本原理和基本方法,理解图形绘制的基本算法,学会初步图形程序设计。 英文简介: Computer Graphics is the subject which concerned with how computer builds, processes and shows graphics. Its importance has been shown in people’s more and more intensively need for harmony human-machine interface. Graphics user interface has become an important part of software. It is a significant trend to show abstract conception or data in graphics way. Through the learning of this course, students could master Computer Graphics’basic theories and methods,understand graphics basic algorithms and learn how to design basic graphics program. 三、课程性质与教学目的 《计算机图形学》是信息与计算科学专业的一门主要专业课。通过本课程的学习,使学生掌握基本的二、三维的图形的计算机绘制方法,理解光栅图形生成基本算法、几何造型技术、真实感图形生成、图形标准与图形变换等概念和知识。学会图形程序设计的基本方法,为图形算法的设计、图形软件的开发打下基础。 四、教学内容及要求 第一章绪论 (一)目的与要求 1.掌握计算机图形学的基本概念; 2.了解计算机图形学的发展、应用; 3.掌握图形系统的组成。

奥运五环的意义

随着奥林匹克不断的深入人心,作为奥林匹克标志的五环也广为人知,但是这个标志的真正意义知道的人却不多。 奥林匹克标志是由《奥林匹克宪章》确定的,它由5个奥林匹克环套接组成,可以是单色,也可以是蓝、黄、黑、绿、红5种颜色。环从左到右互相套接,上面是蓝、黑、红环,下面是黄、绿环。整个造型为一个底部小的规则梯形。奥林匹克标志象征五大洲和全世界的运动员在奥运会上相聚一堂。 奥林匹克标志最早是根据1913年顾拜旦的提议设计的,而图案的原型则直接取制于古希腊德尔斐圣坛上的五环。起初国际奥委会采用蓝、黄、黑、绿、红色作为五环的颜色,是因为它能代表当时国际奥委会成员国国旗的颜色,如瑞典的蓝、黄色,希腊的蓝、白色,法国、英国、美国、德国、比利时、意大利及匈牙利的三色旗,西班牙的黄、红色,日本的白、红色等等。的确,这是一个真正的国际性颜色标志。 1914年在巴黎召开的庆祝奥运会复兴20周年的奥林匹克全会上,顾拜旦先生解释了他的会标设计思想:“五环上的蓝、黄、绿、红和黑环,象征世界上承认奥林匹克运动、并准备参加奥林匹克竞赛的五大洲,第六种颜色白色———旗帜的底色,意指所有国家都毫无例外地能在自己的旗帜下参加比赛。”因此,作为奥运会象征、相互环扣一起的5个圆环,为各民族间的和平事业服务的思想。自1920年第七届安特卫普奥运会起,五环的蓝、黄、黑、绿和红色开始成为五大洲的象征,分别代表欧洲、亚洲、非洲、澳洲和美洲。 《奥林匹克宪章》规定,奥林匹克标志是奥林匹克运动的象征,是国际奥委会的专用标志,未经国际奥委会许可,任何团体或个人不得将其用于广告或其它商业性活动。国际奥委会还要求各国采取必要的措施,保护奥林匹克标志,以确保奥林匹克运动的权威性,避免奥林匹克标志被滥用。

《奥运五环》教案

《奥运五环》 教学目标 ★认识14个字,会正确工整地书写“视、况、表”等8个字。 ★能正确流利地朗读课文,知道奥运五环代表的意义。 ★让孩子关心奥运。 教学重点 ★认识生字,朗读课文,知道奥运五环代表的意思。 教学过程 一、创设情境,激趣引入 1、教师:(课件)孩子们,请看大屏幕。你知道这面旗帜的名字吗?对,这就是奥运五环。每隔四年,这灿烂的奥运五环旗就会在奥运会场上飘扬。奥运会是全世界人民共同的运动会,它把全世界一百多个国家的运动健儿们都聚集在了一起,一起比赛,一起拼搏。(课件)今天,我们一起来学习16课《奥运五环》。一起读读课题吧。 2、教师介绍奥运知识 3、出示导学提纲: (1)听录音读课文,标出自然段序号 (2)学习生字词 (3)用自己喜欢的方式读课文,边度边思考:奥运五环有哪些颜色?他们分别代表什么?连在一起是什么意思? 二、初读课文,检测生字词 1、请小朋友轻轻打开语文书,(课件)让我们一起带着问题来听

课文录音吧!边听边标自然段序号。 2、请大家再读课文,注意读准字音,读通句子,不添字,不漏字。遇到生字圈出来多读几遍。 3、教师:刚才,同学们学得很认真,现在老师来考考大家,好吗? (1)(课件)这些生字你都会读了吗?请小朋友自己练习练习。下面请跟我读一遍:奥、环、视、赛、况、幕、表、洲、欧、亚、洋、界、员、肤。 (2)小朋友,你觉得有没有特别容易读错的字,想为大伙儿提个醒? (3)现在,老师把生字娃娃的拼音小帽给摘掉了,你还能叫出它们的名字吗?会认的小朋友一起大声地告诉大家。 (4)请小朋友们说一说同多学习你记住了哪些生字,把你的识字方法和同学们说一说。 三、品读课文,理解内容 1、学习第一自然段。 大家生字学得很好,现在我们一起来学习课文,请一个小朋友来读这句话,(课件)其他小朋友思考:你从这句话知道了什么?是呀,奥运会还没开始,阳阳就坐在电视机前等着了。(课件)一个“早”,一个“等”就让我们感受到了阳阳对奥运会的关心与期待,感受到了阳阳的激动与兴奋。让我们也怀着激动兴奋的心情,一起读一读这句话:今天,电视台要直播奥运会比赛的实况,阳阳早就坐在电视机前

计算机图形学实验报告

计算机图形学 实验报告 姓名:谢云飞 学号:20112497 班级:计算机科学与技术11-2班实验地点:逸夫楼507 实验时间:2014.03

实验1直线的生成 1实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析 实验数据的能力; 编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的 直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记 录两种算法的绘制时间;利用excel等数据分析软件,将试验结果编 制成表格,并绘制折线图比较两种算法的性能。 2实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One(自制平台)。 本实验提供名为 Experiment_Frame_One的平台,该平台提供基本 绘制、设置、输入功能,学生在此基础上实现DDA算法和Mid_Bresenham 算法,并进行分析。 ?平台界面:如错误!未找到引用源。所示 ?设置:通过view->setting菜单进入,如错误!未找到引 用源。所示 ?输入:通过view->input…菜单进入.如错误!未找到引用 源。所示 ?实现算法: ◆DDA算法:void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) Mid_Bresenham法:void CExperiment_Frame_OneView::Mid_Bresenham(int X0, int Y0, int X1, int Y1)

3实验结果 3.1程序流程图 1)DDA算法流程图:开始 定义两点坐标差dx,dy,以及epsl,计数k=0,描绘点坐标x,y,x增 量xIncre,y增量yIncre ↓ 输入两点坐标x1,y1,x0,y0 ↓ dx=x1-x0,dy=y1-y0; _________↓_________ ↓↓ 若|dx|>|dy| 反之 epsl=|dx| epsl=|dy| ↓________...________↓ ↓ xIncre=dx/epsl; yIncre=dy/epsl ↓ 填充(强制整形)(x+0.5,y+0.5); ↓←←←← 横坐标x+xIncre; 纵坐标y+yIncre; ↓↑ 若k<=epsl →→→k++ ↓ 结束 2)Mid_Bresenham算法流程图开始 ↓ 定义整形dx,dy,判断值d,以及UpIncre,DownIncre,填充点x,y ↓ 输入x0,y0,x1,y1 ______↓______ ↓↓ 若x0>x1 反之 x=x1;x1=x0;x0=x; x=x0;

计算机图形学实验--完整版-带结果--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=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); }

相关文档
最新文档