cc++实现控制台下字符画直线和画圆.docx
- 文档编号:698320
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:13
- 大小:1.74MB
cc++实现控制台下字符画直线和画圆.docx
《cc++实现控制台下字符画直线和画圆.docx》由会员分享,可在线阅读,更多相关《cc++实现控制台下字符画直线和画圆.docx(13页珍藏版)》请在冰豆网上搜索。
cc++实现控制台下字符画直线和画圆
c/c++实现控制台下字符画直线,画圆
DDA画直线法,DDA算法原理:
ε=1/max(|△x|,|△y|)
中点BH画圆法
八分法
首先解决八分之一圆弧
算法步骤:
1.输入圆的半径R。
2.计算初始值d=1.25-R、x=0、y=R。
3.绘制点(x,y)及其在八分圆中的另外七个对称点。
4.判断d的符号。
若d≤0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。
5.当x 否则结束。 改进: 用d-0.25代替d 算法步骤: 1.输入圆的半径R。 2.计算初始值d=1-R、x=0、y=R。 3.绘制点(x,y)及其在八分圆中的另外七个对称点。 4.判断d的符号。 若d≤0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。 5.当x 否则结束。 源代码: DDA画直线: #include #include usingnamespacestd; intarr[100][100]; voiddrawLine(intx0,inty0,intx1,inty1) { intymax=y1; intymin=y0; if(y0>y1){ ymax=y0; ymin=y1; } intxmax=x0; if(x1>x0)xmax=x1; for(intj=ymin;j { for(inti=0;i { if(arr[i][j]==1)cout<<"*"; elsecout<<""; } cout< } cout< } voidDDAline(intx0,inty0,intx1,inty1) { intdx,dy,epsl,k; floatx,y,xIncre,yIncre; dx=x1-x0;dy=y1-y0;x=x0;y=y0; if(abs(dx)>abs(dy))epsl=abs(dx); elseepsl=abs(dy); xIncre=(float)(dx)/epsl; yIncre=(float)(dy)/epsl; for(k=0;k<=epsl;k++) { inttx=(int)(x+0.5); intty=(int)(y+0.5); arr[tx][ty]=1; //putpixel((int)(x+0.5),(int)(y+0.5)); x+=xIncre; y+=yIncre; } drawLine(x0,y0,x1,y1); } intmain() { intx0,y0,x1,y1; while(true) { cout<<"请输入第一个点的x,y值: "; cin>>x0>>y0; cout<<"请输入第二个点的x,y值: "; cin>>x1>>y1; if(y0>y1)//交换值使得y1在y0下面 { inttemp=y1; y1=y0; y0=temp; temp=x1; x1=x0; x0=temp; } drawLine(x0,y0,x1,y1); } return0; } 中点BH画圆法 #include intarr[100];//存储由算法找到的第一象限y>=x区间的所有的圆点坐标 intarrXY[100][100];//存储最终的圆点矩阵 //intr: r为要画的圆半径 voidCircle(intr,intnumOfarr) { intx,y; //找到其他划分区间的圆点坐标,在存储矩阵上标记 for(inti=0;i { //-x,-y if(i==0)x=r; elsex=-i+r; y=-arr[i]+r; arrXY[x][y]=1; //-y,-x if(i==0)y=r; elsey=-i+r; x=-arr[i]+r; arrXY[x][y]=1; //y,-x if(i==0)y=r; elsey=-i+r; x=arr[i]+r; arrXY[x][y]=1; //x,-y if(i==0)x=r; elsex=i+r; y=-arr[i]+r; arrXY[x][y]=1; //x,y if(i==0)x=r; elsex=i+r; y=arr[i]+r; arrXY[x][y]=1; //y,x if(i==0)y=r; elsey=i+r; x=arr[i]+r; arrXY[x][y]=1; //-y,x if(i==0)y=r; elsey=i+r; x=-arr[i]+r; arrXY[x][y]=1; //-x,y if(i==0)x=r; elsex=-i+r; y=arr[i]+r; arrXY[x][y]=1; } for(inti=0;i<=2*r;i++) { for(intj=0;j<=2*r;j++) { if(arrXY[j][i]<=0)printf(""); elseif(arrXY[j][i]==1)printf("*"); elseprintf("+"); } printf("\n"); } } voidDraw(intr) { intx=0,y=r,d=1-r; while(x<=y) { arr[x]=y;//存储坐标, if(d<0)d+=2*x+3; else{ d+=2*(x-y)+5; y--; } x++; } Circle(r,x); printf("\n"); return; } intmain() { intr=25; printf("请输入圆半径: "); scanf("%d",&r); Draw(r); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cc 实现 控制 台下 字符 直线
![提示](https://static.bdocx.com/images/bang_tan.gif)