cc++实现控制台下字符画直线和画圆.docx

上传人:b****6 文档编号:7592519 上传时间:2023-05-11 格式:DOCX 页数:13 大小:1.72MB
下载 相关 举报
cc++实现控制台下字符画直线和画圆.docx_第1页
第1页 / 共13页
cc++实现控制台下字符画直线和画圆.docx_第2页
第2页 / 共13页
cc++实现控制台下字符画直线和画圆.docx_第3页
第3页 / 共13页
cc++实现控制台下字符画直线和画圆.docx_第4页
第4页 / 共13页
cc++实现控制台下字符画直线和画圆.docx_第5页
第5页 / 共13页
cc++实现控制台下字符画直线和画圆.docx_第6页
第6页 / 共13页
cc++实现控制台下字符画直线和画圆.docx_第7页
第7页 / 共13页
cc++实现控制台下字符画直线和画圆.docx_第8页
第8页 / 共13页
cc++实现控制台下字符画直线和画圆.docx_第9页
第9页 / 共13页
cc++实现控制台下字符画直线和画圆.docx_第10页
第10页 / 共13页
cc++实现控制台下字符画直线和画圆.docx_第11页
第11页 / 共13页
cc++实现控制台下字符画直线和画圆.docx_第12页
第12页 / 共13页
cc++实现控制台下字符画直线和画圆.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

cc++实现控制台下字符画直线和画圆.docx

《cc++实现控制台下字符画直线和画圆.docx》由会员分享,可在线阅读,更多相关《cc++实现控制台下字符画直线和画圆.docx(13页珍藏版)》请在冰点文库上搜索。

cc++实现控制台下字符画直线和画圆.docx

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;

}

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

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2