中点画圆算法实验报告Word格式.docx

上传人:b****5 文档编号:19658041 上传时间:2023-01-08 格式:DOCX 页数:5 大小:16.68KB
下载 相关 举报
中点画圆算法实验报告Word格式.docx_第1页
第1页 / 共5页
中点画圆算法实验报告Word格式.docx_第2页
第2页 / 共5页
中点画圆算法实验报告Word格式.docx_第3页
第3页 / 共5页
中点画圆算法实验报告Word格式.docx_第4页
第4页 / 共5页
中点画圆算法实验报告Word格式.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

中点画圆算法实验报告Word格式.docx

《中点画圆算法实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《中点画圆算法实验报告Word格式.docx(5页珍藏版)》请在冰豆网上搜索。

中点画圆算法实验报告Word格式.docx

  2,计算决策关键参数的初始值,p=5/4-r;

  3,在每个xn的位置,从n=0开始,更具决策值p来判断:

  如果p  并且执行p=p+2*x+3;

  如果p>

=0,下一个点的位置为(xn+1,Yn-1);

  并且执行p=p+2.0*(x-y)+5;

  4,通过对称原理计算其他7个对称相关点;

  5,移动坐标到圆心点(x1,y1)

  x=x+x1;

  Y=Y+y1;

  6,如果x  源代码:

  #include

  gLintxc=0;

  gLintyc=0;

  intp[200][200];

  classscreenpt

  {

  private:

  gLintx,y;

  public:

  screenpt(){

  x=y=0;

  }

  voidsetcoords(gLintxcoordValue,gLintycoordValue){

  x=xcoordValue;

  y=ycoordValue;

  gLintgetx()const{

  returnx;

  gLintgety()const{

  returny;

  voidincrementx(){

  x++;

  voiddecrementy(){

  y--;

  };

  voidsetpixel(gLintxcoord,gLintycoord)

  p[xcoord][ycoord]=1;

//设置边缘色为1

  glbegin(gL_poInTs);

  glVertex2i(xcoord,ycoord);

  glend();

  voidcircleplotpoints(gLintxc,gLintyc,screenptcircpt)

  setpixel(xc+circpt.getx(),yc+circpt.gety());

  setpixel(xc-circpt.getx(),yc+circpt.gety());

  setpixel(xc+circpt.getx(),yc-circpt.gety());

  setpixel(xc-circpt.getx(),yc-circpt.gety());

  setpixel(xc+circpt.gety(),yc+circpt.getx());

  setpixel(xc-circpt.gety(),yc+circpt.getx());

  setpixel(xc+circpt.gety(),yc-circpt.getx());

  setpixel(xc-circpt.gety(),yc-circpt.getx());

  voidcirclemidpoint(gLintradius)

  screenptcircpt;

  gLintp=1-radius;

  circpt.setcoords(0,radius);

  voidcircleplotpoints(gLint,gLint,screenpt);

  circleplotpoints(xc,yc,circpt);

  while(circpt.getx()  circpt.incrementx();

  if(p  p+=2*circpt.getx()+1;

  else{

  circpt.decrementy();

  p+=2*(circpt.getx()-circpt.gety())+1;

  voidgetpixel(intx,inty,int

  voidsetpixel2(gLintxcoord,gLintycoord)

  //p[i][j]=1;

填充色为2

  p[xcoord][ycoord]=2;

  glcolor3f(0.0,1.0,1.0);

  glpointsize(5);

  glVertex2f(xcoord,ycoord);

  voidboundaryFill4(intx,inty,intfillcolor,intbordercolor)

  intinteriorcolor;

  getpixel(x,y,interiorcolor);

  if((interiorcolor!

=bordercolor)

  boundaryFill4(x+1,y,fillcolor,bordercolor);

  boundaryFill4(x-1,y,fillcolor,bordercolor);

  boundaryFill4(x,y+1,fillcolor,bordercolor);

  boundaryFill4(x,y-1,fillcolor,bordercolor);

  voidrenderscene(void){

  glclear(gL_coLoR_buFFeR_bIT);

  gluortho2D(-500,500,-500,500);

  glpointsize(3);

  circlemidpoint(30);

  boundaryFill4(100,100,2,1);

  glFlush();

  intmain(intargc,char*argv[])

  glutInit(

  glutInitDisplaymode(gLuT_Rgb|gLuT_sIngLe);

  glutInitwindowposition(100,100);

  glutInitwindowsize(400,400);

  glutcreatewindow("

一个opengL程序"

);

  glutDisplayFunc(

  glutmainLoop((:

中点画圆算法实验报告));

  return0;

  运行结果:

  实验总结:

这次试验总的来说,就是根据书里的实验思想,再稍加修改就可以得到正确的答案。

我觉得无论做什么,首先要把实验算法的思想了解清楚才能知道自己该怎么做。

开始,我就简单的吧书本里的画圆算法和填充算法拼凑在一起,结果很明显就是错误的,后来拜托别的同学帮我调试程序,就得到了最终的结果,所以看懂书里的程序思想很重要,而不仅仅是敲代码。

  篇三:

中点画圆实验报告

  中点画圆实验报告

  一、实验目的:

  用Vc环境实现中点画圆,并显示结果;

  二、实验环境:

  microsoftVisualc++6.0

  三、实验人数:

  1人

  四、实验内容:

  inthuadian(intx0,inty0,intx,inty,intcolor)

  putpixel(x+x0,y+y0,Rgb(255,0,0));

  putpixel(-x+x0,y+y0,Rgb(255,0,0));

  putpixel(-x+x0,-y+y0,Rgb(255,0,0));

  putpixel(x+x0,-y+y0,Rgb(255,0,0));

  putpixel(y+x0,x+y0,Rgb(255,0,0));

  putpixel(-y+x0,x+y0,Rgb(255,0,0));

  putpixel(-y+x0,-x+y0,Rgb(255,0,0));

  putpixel(y+x0,-x+y0,Rgb(255,0,0));

  return(0);

  voidhuayuan(intx0,inty0,intr,intcolor)

  intx,y,d;

  x=0;

y=r;

d=1.25-r;

  while(y>

=x)

  huadian(x0,y0,x,y,color);

  if(d  {d=d+2*x+3;

x++;

}

  else

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

y--;

  voidmain()

  intr,c=Rgb(255,0,0);

  initgraph(640,480);

  huayuan(200,200,100,c);

  if(getch()==1)

  exit;

  closegraph();

  五、实验步骤:

  1、弄清实验原理:

  如果我们构造函数F(x,y)=x2+y2-R2,则对于圆上的点有F(x,y)=0,对于圆外的点有F(x,y)>

0,对于圆内的点F(x,y)  若d  d=F(xp+2,yp-0.5)=(xp+2)2+(yp-0.5)2-R2=d+2xp+3

  若d≥0,则应取p2为下一象素,而且下一象素的判别式为

  d=F(xp+2,yp-1.5)=(xp+2)2+(yp-1.5)2-R2=d+2(xp-yp)+5

  我们这里讨论的第一个象素是(0,R),判别式d的初始值为:

  d0=F(1,R-0.5)=1.25-R

  2、根据实验原理写出用c语言表示的代码

  3、在Vc环境中完善代码;

  六、实验过程中遇到的问题及处理方法:

  1.调试不出程序,头文件在一些机子上不能检索,所以得安装一个插件

  解压,打开点击setup就可解决。

  2.在程序调试中有很多次错误,最后发现是没有弄清,函数的主调关系,最后进行了查阅资料,调试出了程序easyx_v20XX0610(beta).zip

  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1