永发信息网

c语言用*画出一个圆

答案:3  悬赏:80  手机版
解决时间 2021-12-18 06:17
  • 提问者网友:箛茗
  • 2021-12-18 01:10
方法越容易理解越好
最佳答案
  • 五星知识达人网友:风格不统一
  • 2021-12-18 01:47
如果你用 wintc 或者可以用 graphic.h编程的话
void circ(int x,int y,int r,int c)
{
int i,ty,tx;
for(i=x;i<=x+r;++i)
{
ty=sqrt(pow(r,2)-pow((i-x),2))+y;
putpixel(i,ty,(i+ty)%c);
putpixel(i,2*y-ty,(i+ty)%c);
putpixel(2*x-i,ty,(i+ty)%c);
putpixel(2*x-i,2*y-ty,(i+ty)%c);
}
for(i=y;i<=y+r;++i)
{
tx=sqrt(pow(r,2)-pow((i-y),2))+x;
putpixel(tx,i,(tx+i)%c);
putpixel(tx,2*y-i,(tx+i)%c);
putpixel(2*x-tx,i,(tx+i)%c);
putpixel(2*x-tx,2*y-i,(tx+i)%c);
}
}

四个变量分别是圆心坐标 xy,半径,颜色
原理是先画四分之一个圆,然后用左右上下对称画全
tx=sqrt(pow(r,2)-pow((i-y),2))+x; 也就是圆标准方程的变形

附上一个画圆的程序 wintc1.91图形模板编写的



#include "Conio.h"
#include "graphics.h"
#include"stdlib.h"
#include"time.h"
#include"math.h"
#define closegr closegraph

void initgr(void)
{
int gd = DETECT, gm = 0;
registerbgidriver(EGAVGA_driver);
initgraph(&gd, &gm, "");
}

int main(void)
{
int i,k,x,y,rr;
void circ(int,int,int,int) ;
int pr();
initgr();
srand(time(NULL));
for(k=0;k<50;++k)
{
rr=rand()%150+50;
x=(rand()%2)*2-1;
y=(rand()%2)*2-1;
for(i=1;i<600;++i)
circ(320+rr*x,240+rr*y,i,k+2);
}

getch();
closegr();
return 0;
}

int pr()
{
static int m=2;
if(m>=9) m=2;
return m++;

}

void circ(int x,int y,int r,int c)
{
int i,ty,tx;
for(i=x;i<=x+r;++i)
{
ty=sqrt(pow(r,2)-pow((i-x),2))+y;
putpixel(i,ty,(i+ty)%c);
putpixel(i,2*y-ty,(i+ty)%c);
putpixel(2*x-i,ty,(i+ty)%c);
putpixel(2*x-i,2*y-ty,(i+ty)%c);
}
for(i=y;i<=y+r;++i)
{
tx=sqrt(pow(r,2)-pow((i-y),2))+x;
putpixel(tx,i,(tx+i)%c);
putpixel(tx,2*y-i,(tx+i)%c);
putpixel(2*x-tx,i,(tx+i)%c);
putpixel(2*x-tx,2*y-i,(tx+i)%c);
}
}
全部回答
  • 1楼网友:琴狂剑也妄
  • 2021-12-18 03:09
//纯用*符号输出园,园边会不整齐,园半径越大越园 #include #include #define rad 19 //超过19只看到部分园,不过园边整齐些 void main() { int i,j; double tmp; double knum,xnum; //计算空格数和星号数 //输出上半圆 for ( i=0; i { tmp=rad*rad-(rad-i)*(rad-i); knum=sqrt(tmp)+0.4; xnum=knum+knum;//得到星号数 knum=rad-knum; //得到空格数 tmp=0; for ( j=knum; j>0; j--) { if (tmp<38.0) //超过80个字符就不要输出了 { printf(" ");//换成一个空格,出来是椭圆 } tmp++; } for ( j=xnum; j>0; j--) { if (tmp<38.0) { printf("**");//换成一个*,出来是椭圆 } tmp++; } printf("\n"); } //输出下半圆 for ( i=rad; i>0; i-- ) { tmp=rad*rad-(rad-i)*(rad-i); knum=sqrt(tmp)+0.4; xnum=knum+knum; knum=rad-knum; tmp=0; tmp=0; for ( j=knum; j>0; j--) { if (tmp<38.0) { printf(" "); } tmp++; } for ( j=xnum; j>0; j--) { if (tmp<38.0) { printf("**"); } tmp++; } printf("\n"); } printf("\n"); }
  • 2楼网友:迟山
  • 2021-12-18 02:14
如果你用 wintc 或者可以用 graphic.h编程的话 void circ(int x,int y,int r,int c) { int i,ty,tx; for(i=x;i&lt;=x+r;++i) { ty=sqrt(pow(r,2)-pow((i-x),2))+y; putpixel(i,ty,(i+ty)%c); putpixel(i,2*y-ty,(i+ty)%c); putpixel(2*x-i,ty,(i+ty)%c); putpixel(2*x-i,2*y-ty,(i+ty)%c); } for(i=y;i&lt;=y+r;++i) { tx=sqrt(pow(r,2)-pow((i-y),2))+x; putpixel(tx,i,(tx+i)%c); putpixel(tx,2*y-i,(tx+i)%c); putpixel(2*x-tx,i,(tx+i)%c); putpixel(2*x-tx,2*y-i,(tx+i)%c); } } 四个变量分别是圆心坐标 xy,半径,颜色 原理是先画四分之一个圆,然后用左右上下对称画全 tx=sqrt(pow(r,2)-pow((i-y),2))+x; 也就是圆标准方程的变形 附上一个画圆的程序 wintc1.91图形模板编写的 #include "conio.h" #include "graphics.h" #include"stdlib.h" #include"time.h" #include"math.h" #define closegr closegraph void initgr(void) { int gd = detect, gm = 0; registerbgidriver(egavga_driver); initgraph(&amp;gd, &amp;gm, ""); } int main(void) { int i,k,x,y,rr; void circ(int,int,int,int) ; int pr(); initgr(); srand(time(null)); for(k=0;k&lt;50;++k) { rr=rand()%150+50; x=(rand()%2)*2-1; y=(rand()%2)*2-1; for(i=1;i&lt;600;++i) circ(320+rr*x,240+rr*y,i,k+2); } getch(); closegr(); return 0; } int pr() { static int m=2; if(m&gt;=9) m=2; return m++; } void circ(int x,int y,int r,int c) { int i,ty,tx; for(i=x;i&lt;=x+r;++i) { ty=sqrt(pow(r,2)-pow((i-x),2))+y; putpixel(i,ty,(i+ty)%c); putpixel(i,2*y-ty,(i+ty)%c); putpixel(2*x-i,ty,(i+ty)%c); putpixel(2*x-i,2*y-ty,(i+ty)%c); } for(i=y;i&lt;=y+r;++i) { tx=sqrt(pow(r,2)-pow((i-y),2))+x; putpixel(tx,i,(tx+i)%c); putpixel(tx,2*y-i,(tx+i)%c); putpixel(2*x-tx,i,(tx+i)%c); putpixel(2*x-tx,2*y-i,(tx+i)%c); } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯