Bresenham直线扫描算法MFC实现,拿去修改添加功能就能拿到4.5绩点。
2022-05-25 00:25:33 70.56MB MFC
1
c++ 、MFC 实现中点画圆算法源代码、MFC实现Bresenham画圆算法源代码、c++ 、MFC 实现中点画圆算法及工程代码、Bresenham画圆工程代码,仅供参考,
2022-05-19 21:14:54 1.84MB c++ 、MFC 实现中点画圆 mfc
1
#include #include #include #include #include //////////////////////////////////////////////////////////////functions///////////////////////////////////////////////// void swap(float &m,float &n) { float temp=n; n=m; m=temp; } int sign(float a,float b)//sign() { int t; if(a>b) { t=1;} else if(aBresenham__Line///////////////////////////////////////////// //利用Bresenham画直线法构造本实验所需要的多边形(共三个) void Bresenham(HDC hdc,float xs,float ys,float xe,float ye) { float x=xs; float y=ys; float dx=abs(xe-xs); float dy=abs(ye-ys); int sx=sign(xe,xs); int sy=sign(ye,ys); bool Flag; if(dy>dx) { swap(dx,dy); Flag=1; } else Flag=0; float Nerror=2*dy-dx; for(int i=1;i=0) { if(Flag) { x=x+sx;} else y=y+sy; Nerror=Nerror-2*dx; } if(Flag) { y=y+sy;} else x=x+sx; Nerror=Nerror+2*dy; } } ///////////////////////////////////四连通种子填充/////////////////////////////////////////////////// void BoundaryFill4(HDC hdc,int x,int y,int FilledColor,int BoundaryColor) { int CurrentColor; CurrentColor=GetPixel(hdc,x,y); if(CurrentColor!=BoundaryColor&&CurrentColor!=FilledColor) { SetPixel(hdc,x,y,FilledColor); BoundaryFill4(hdc,x+1,y,FilledColor,BoundaryColor); BoundaryFill4(hdc,x-1,y,FilledColor,BoundaryColor); BoundaryFill4(hdc,x,y+1,FilledColor,BoundaryColor); BoundaryFill4(hdc,x,y-1,FilledColor,BoundaryColor); } } ////////////////////////////////////////扫描线填充/////////////////////////////////////////////////// //DrawLine()函数:在(x1,y)和(x2,y)两点之间画一条颜色为FilledColor的横线(用来扫描填充) void drawline(HDC hdc, int x1, int x2,int y0, int FilledColor) { for(int n=x1+1;n500)) {a[j][1]=i;} } } //利用循环调用DrawLine函数逐行填充两交点之间的点 for(int k=0;k<300;k++) { if((a[k][0]!=0)&&(a[k][1]!=0)) drawline(hdc,a[k][0],a[k][1],k,RGB(255,0,0));} } ///////////////////////////////////////////////边界填充////////////////////////////////////// //Contrary()取反函数:如果点的颜色为白,则将点置为填充色;如果点的颜色为填充色,则将点置为白色 //忽略了边界色,即不对边界点作颜色处理 void contrary(HDC hdc, int x, int y,int FilledColor) { for(int h=x;h<280;h++) { if(GetPixel(hdc,h,y)==RGB(255,255,255)) { SetPixel(hdc,h,y,FilledColor); } else if(GetPixel(hdc,h,y)==FilledColor) { SetPixel(hdc,h,y,RGB(255,255,255)); } } } //borderline()边线函数: 先找出图形的边界 左边和右边,从右到左的顺序调用contrary()函数进行填充 void borderline(HDC hdc, int boundarycolor) { for(int j=280;j<499;j++) { for(int i=80;i<280;i++) { int currentcolor=GetPixel(hdc,i,j); //排除了边界水平的情况,即(x-1,y)、(x,y)和(x+1,y)连续三点都是边界点的点不参与填充 if((currentcolor==boundarycolor)&&(GetPixel(hdc,i+1,j)!=boundarycolor)&&(GetPixel(hdc,i-1,j)!=boundarycolor)&&(i>100)) { contrary(hdc,i,j,RGB(0,0,255)); } } } for(int m=280;m<499;m++) { for(int n=80;n<280;n++) { int currentcolor=GetPixel(hdc,n,m); if((currentcolor==boundarycolor)&&(GetPixel(hdc,n+1,m)!=boundarycolor)&&(GetPixel(hdc,n-1,m)!=boundarycolor)&&(n<101)) { contrary(hdc,n,m,RGB(0,0,255)); } } } }
1
将绘制的折线连接成多边形,并选择种子填充法或扫描线填充法进行填充 鼠标交互生成矩形裁剪框,实现对绘制的折线的裁剪
2022-04-27 23:55:48 2KB Bresenham算法 橡皮筋
1
计算机图形学--用JAVA实现Bresenham算法画圆,注意画的是个整圆,而不是一段圆弧,同时加上了网格线
2022-04-23 21:35:33 5KB Bresenham
1
这是我的计算机图形学课程设计DDA算法。DDA算法+BresenHam实现(c++ + OpenGL实现)
2022-04-13 00:29:25 2.14MB DDA算法实现(c++ + OpenGL实现)
1
bresenham画圆算法,运用的JAVA,改下类名就可以用了
2022-04-11 16:25:06 2KB bresenham 画圆
1
DDA 画线算法、中点 Bresenham 画线算法、中点画圆法、 Bresenham 画圆,交互式画线、画圆,鼠标跟随动态更新画线。
2022-04-11 15:44:42 1.88MB MFC 计算机图形学
1
计算机图形学中,利用OpenGL,中点Bresenham算法画直线段
2022-04-05 19:08:02 3KB 图形学
1
这份代码是一个vs工程,可以vs打开,实现的是使用Bresenham算法画圆
2022-04-05 18:52:39 1.69MB Bresenham
1