欢迎来到天天文库
浏览记录
ID:57651315
大小:190.50 KB
页数:8页
时间:2020-08-30
《圆和椭圆的生成.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验三、圆和椭圆的生成实验要求:1、分别用圆的参数生成法和Bresenham算法画圆2、请调用画圆和画椭圆的函数画出右图提示:openGL里可通过glrotatef函数实现坐标系的旋转,如绕Z轴旋转45度(相当于XY平面内图形绕原点旋转45度)通过glrotatef(45,0,0,1)来实现。假定园心在(xc,yc)点,将圆用参数方程表示:0≤θ≤2将离散化0≤k≤n1圆的参数方程生成算法使用上述方法可沿圆周等距点绘制出圆来。算法中,n取的值越大,计算的点越多,但执行时间越长。此算法的缺点是含有三角函数,计算量大。使用上述离散化方程,可以得到如下算法:for(k﹦0;k2、x﹦xc﹢Rcos(2k/n);y﹦yc﹢Rsin(2k/n);gl_Point(int(x),int(y));}2Bresenham生成圆弧的算法假设圆心(0,0)为原点考虑AB弧的画法,显示一个整圆时,只要在显示AB上任一点(x,y)时,同时显示在圆周上其它七个对称点(y,x),(y,-x),(x,-y),(-x,-y),(-y,-x),(-y,x),(-x,y)因此,只考虑画AB段圆弧图7个对称点O程序x0=0,y0=Rd1=3–2*R当di<0时di+1=di+4xi-1+6xi=xi-1+1当di≥0时di+1=di+4(xi-1-yi-1)+10xi=xi-1+1,yi=yi-3、1-1voidbresenham_arc(intR){//一象限八分之一圆弧intx,y,d;x=0;y=R;d=3-2*R;while(x4、lipse(inta,intb)//椭圆生成源代码{intx,y;floatd;x=0;y=b;d=b*b+a*a*(-b+0.25);gl_Point(x,y);while(b*b*(x+1)0){if(d<0){d=d+b*b*(2*x+2)+a*a*5、(-2*y+3);x=x+1;y=y-1;}else{d=d+a*a*(-2*y+3);y=y-1;}gl_Point(x,y);}//第一象限下部分}
2、x﹦xc﹢Rcos(2k/n);y﹦yc﹢Rsin(2k/n);gl_Point(int(x),int(y));}2Bresenham生成圆弧的算法假设圆心(0,0)为原点考虑AB弧的画法,显示一个整圆时,只要在显示AB上任一点(x,y)时,同时显示在圆周上其它七个对称点(y,x),(y,-x),(x,-y),(-x,-y),(-y,-x),(-y,x),(-x,y)因此,只考虑画AB段圆弧图7个对称点O程序x0=0,y0=Rd1=3–2*R当di<0时di+1=di+4xi-1+6xi=xi-1+1当di≥0时di+1=di+4(xi-1-yi-1)+10xi=xi-1+1,yi=yi-
3、1-1voidbresenham_arc(intR){//一象限八分之一圆弧intx,y,d;x=0;y=R;d=3-2*R;while(x4、lipse(inta,intb)//椭圆生成源代码{intx,y;floatd;x=0;y=b;d=b*b+a*a*(-b+0.25);gl_Point(x,y);while(b*b*(x+1)0){if(d<0){d=d+b*b*(2*x+2)+a*a*5、(-2*y+3);x=x+1;y=y-1;}else{d=d+a*a*(-2*y+3);y=y-1;}gl_Point(x,y);}//第一象限下部分}
4、lipse(inta,intb)//椭圆生成源代码{intx,y;floatd;x=0;y=b;d=b*b+a*a*(-b+0.25);gl_Point(x,y);while(b*b*(x+1)0){if(d<0){d=d+b*b*(2*x+2)+a*a*
5、(-2*y+3);x=x+1;y=y-1;}else{d=d+a*a*(-2*y+3);y=y-1;}gl_Point(x,y);}//第一象限下部分}
此文档下载收益归作者所有