试编写可以对一段任意圆弧进行扫描转换地算法.docxVIP

  • 5
  • 0
  • 约1.11万字
  • 约 15页
  • 2018-07-09 发布于江苏
  • 举报

试编写可以对一段任意圆弧进行扫描转换地算法.docx

试编写可以对一段任意圆弧进行扫描转换地算法

6、试编写可以对一段任意圆弧进行扫描转换的算法 将360度的区域分成8个部分 3 2 4 1 5 8 6 7 编写可以对一段任意圆弧进行扫描转换的算法的关键在于,对这段圆弧的起点和终点分别判定是否在同一区域 如果起点和终点在同一区域,调用中点画圆算法,但要根据实际情况对参数进行修正; 如果起点和终点不在同一区域,则要根据实际情况对圆弧段进行分割,分割的原则是将每一段的起点和终点放在同一区域,然后分别调用中点画圆算法画圆弧,同样在画的过程中,要根据实际情况对参数进行修正及算法进行修正; 设圆弧的起点为(x1,y1),终点为(x2,y2),半径为r 如图 A(x1,y1) D(x0-r,y0) C (x0,y0) B(x2,y2)将整个圆弧分为两段,弧AC和弧CB,分别进行扫描转换,转换过程中利用中点画圆方法进行,代码如下:midpoint(x1,y1,x2,y2,r,color,k){ int x,y; float d; x=x1; y=y1; d=(x1+1)^2+(y1-0.5)^2-r^2; putpixel(x,y,color); while (x=x2) { if (d0) { d+=2*x+3; x++; } else { d+=2*(x-y)+5; x++; y=y+k; } } putpixel(x,y,color); main() { scanf(“%d”,n);//分割的圆弧数 for (i=1;i=n;i++) { scanf(“%d,%d,%d,%d,%d”,x1,y1,x2,y2,,k); //要求x1x2 midpoint(x1,y1,x2,y2,r,color,k);7、设计一个多边形区域填充算法,使其边界像素具有一个值,而内部的像素具有另一个值。算法设计:使用画线语句绘制多边形计算窗口客户区的水平边界最大值MaxX和垂直边界最大值MaxY调用系统调色板,设置颜色值FillColor为调色板上取得的颜色,CBackColor为白色。 对于每一条边,y从ymin开始,执行下面的循环。x从扫描线和边的交点处开始到窗口客户区右边界,先获得(x, y)位置的像素颜色,如果是填充色,则置成背景色,否则所有填充色填充。执行x=x+1/k,计算下一个x起点值。如果y=ymin,则扫描结束,否则y++,转(5)。 主要代码:int MaxX,MaxY; Void GetMaxX() //求屏幕最大x值{ CRect rect; GetClientRect(rect); MaxX=rect.riht;}Void GetMaxY() //求屏幕最大y值{ CRect rect; GetClientRect(rect); MaxX=rect.bottom;}Void Draw() //填充多边形函数{ COLORREF CBackColor=RGB(255,255,255);//白色 CClientDC dc(this); int m,n,ymin,ymax; double x,y,k; for (int i=0; i=6; i++) { m=i,n=i+1; if (7==n) n=0; k=(double (Point [m].x- Point [n].x)/ (Point [m].y- Point [n].y);//计算1/k; if ((Point [m].y Point [n].y) //得到每条边y的最大和y最小值 { ymin= Point [m].y; ymax= Point [n].y; x=Point [m].x; //得到x|ymin } else { ymin= Point [n].y; ymax= Point [m].y; x=Point [n].x; } For (y=ymin;yymax;y++){ For(int j

文档评论(0)

1亿VIP精品文档

相关文档