回 帖 发 新 帖 刷新版面

主题:求大神帮我解释这段代码。非常感谢!!!!!!!

#include"graphics.h" 
#include"math.h" 
#include"dos.h" 
#define pi 3.1415926 
#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300 
#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240 
#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y) 
void init()           

int i,l,x1,x2,y1,y2; 
setbkcolor(1);          


    
for(i=0;i<60;i++)      

if(i%5==0) 
l=15; 
else 
l=5; 
x1=200*sin(i*6*pi/180)+300; 
y1=200*cos(i*6*pi/180)+240; 
x2=(200-l)*sin(i*6*pi/180)+300; 
y2=(200-l)*cos(i*6*pi/180)+240; 
line(x1,y1,x2,y2); 


main() 

int x,y,i,k=1; 

unsigned char h,m,s; 
int o,p,q; 
float n; 
struct time t[1]; 
struct date d[1]; 
 int gdriver=DETECT,gmode; 
          registerbgidriver(EGAVGA_driver);
          initgraph( &gdriver, &gmode,"c:\\tc");

for(i=0;i<=6;i++) 

settextstyle(TRIPLEX_FONT,HORIZ_DIR,i); /*控制输出字符的字体,方向,大小*/ 
cleardevice(); 
settextjustify(1,1); 
outtextxy(300,80,"12") ;  
outtextxy(220,100,"11"); 
outtextxy(160,160,"10"); 
outtextxy(140,230,"9");  
outtextxy(160,310,"8");   
outtextxy(220,370,"7");
outtextxy(300,390,"6");  
outtextxy(380,370,"5");   
outtextxy(430,310,"4");   
outtextxy(460,230,"3");
outtextxy(430,160,"2");   
outtextxy(380,100,"1");  


 

init(); 
setwritemode(1);   
if(k!=0)

getdate(d);      
o=d[0].da_year; 
p=d[0].da_mon; 
q=d[0].da_day; 
gettime(t);        
h=t[0].ti_hour; 
m=t[0].ti_min; 
s=t[0].ti_sec; 

setcolor(7);       
n=(float)h+(float)m/60; 
d(150,n,30);       
setcolor(14);      
d(170,m,6);       
setcolor(4);      
d(190,s,6);        
while(!kbhit())    

while(t[0].ti_sec==s) 
gettime(t); 
gotoxy(44,18);    
printf("\b\b\b\b\b\b\b\b\b");   
sound(400);    
delay(70);        
sound(200); 
delay(30); 
nosound();       
setcolor(4); 
d(190,s,6); 
s=t[0].ti_sec; 
d(190,s,6); 
if(t[0].ti_min!=m) 

setcolor(14); 
d(170,m,6); 
m=t[0].ti_min; 
d(170,m,6); 

if(t[0].ti_hour!=h) 


setcolor(7); 
d(150,h,30); 
h=t[0].ti_hour; 
d(150,h,30); 
sound(1000); 
delay(240); 
nosound(); 
delay(140); 
sound(2000); 
delay(240); 
nosound(); 

if(s<10)           /*用字符的形式输出时间*/ 
{ if(m<10) 
printf("%u:0%u:0%u",h,m,s); 
else 
printf("%u:%u:0%u",h,m,s); 

else 
{ if(m<10) 
printf("%u:0%u:%u",h,m,s); 
else 
printf("%u:%u:%u",h,m,s); 

gotoxy(34,19);   
printf("%d年%d月%d日",o,p,q); 
printf("\b\b\b\b\b\b\b\b\b"); 

getch(); 
closegraph();   


其中
circle(300,240,200);   
circle(300,240,205);   
circle(300,240,5);  是什么意思?

回复列表 (共3个回复)

沙发

画圆函数
circle(x坐标,y坐标,半径) 
circle(300,240,5);就是在300,240位置画一个半径为5的圆


另外,建议楼主不要看已经被淘汰的教材。。。。。。。
这个时代还研究TC的话太没前途了。。。

板凳

我写了一个画圆的函数,建议你看看计算机图形学的书,不会的话你可以在问我~~
#include <stdio.h>
#include <conio.h>
#include <graphics.h>

int CentreX;
int CentreY;

void JudgeSector(int x,int y);
void MidPointCircle1(int x,int y,int r);
void MidPointCircle2(int x,int y,int r);

main()
{
      int X=0;
    int Y=0;
      int R=0;
    int driver=DETECT;
    int mode=0;
    initgraph(&driver,&mode,"c:\\tc30-2\\tc30\\bgi");


    setbkcolor(RED);
    setcolor(BLUE);
    line(80,280,480,280);
    line(280,130,280,430);

      printf("Please Input The Circle Centre's Coordinate:(X,Y)\n");
       scanf("%d%d",&X,&Y);
     printf("\nPlease Input The Circle Radius:\n");
       scanf("%d",&R);

       JudgeSector(X,Y);
       MidPointCircle1(0,0,R);
       MidPointCircle2(0,0,R);

       getch();
       closegraph();
       return 0;
}

void JudgeSector(int x,int y)
{
   if(x>=0)
   {  if(y>=0)
      {
      CentreX=x;
      CentreY=-y;
      }
      else if(y<0)
      {
      CentreX=x;
      CentreY=-y;
      }
   }
   else if(x<0)
   {
      if(y>=0)
      {
      CentreX=x;
      CentreY=-y;
      }
      else if(y<0)
      {
      CentreX=x;
      CentreY=-y;
      }
   }


}

void MidPointCircle1(int x,int y,int r)
{
     int d;
     int delta1;
     int delta2;

     x=x+280;
     y=y+280+r;

     d=1-r;
     delta1=3;
     delta2=5-2*r;


    putpixel(x+CentreX,y+CentreY,WHITE);    //1
    putpixel(x+CentreX,560-y+CentreY,WHITE);   //3

    while(y>x)
    {
       if(d<0)
       {
      d=d+delta1;
      delta2=delta2+2;
    }
       else
       {
     d=d+delta2;
     delta2=delta2+4;
     y--;
       }

       delta1=delta1+2;
       x++;
       putpixel(x+CentreX,y+CentreY,WHITE);  //1
       putpixel(x+CentreX,560-y+CentreY,WHITE); //3
       putpixel(560-x+CentreX,y+CentreY,WHITE);//5
       putpixel(560-x+CentreX,560-y+CentreY,WHITE);//7
       }
 }

void MidPointCircle2(int x,int y,int r)
{
     int d;
     int delta1;
     int delta2;
     x=x+280+r;
     y=y+280;

     d=1-r;
     delta1=3;
     delta2=5-2*r;

    putpixel(x+CentreX,y+CentreY,WHITE); //2
    putpixel(560-x+CentreX,y+CentreY,WHITE);   //3

    while(x>y)
    {
       if(d<0)
       {
      d=d+delta1;
      delta2=delta2+2;
    }
       else
       {
     d=d+delta2;
     delta2=delta2+4;
     x--;
       }

       delta1=delta1+2;
       y++;
       putpixel(x+CentreX,y+CentreY,WHITE);          //2
       putpixel(x+CentreX,560-y+CentreY,WHITE);      //4
       putpixel(560-x+CentreX,y+CentreY,WHITE);    //6
       putpixel(560-x+CentreX,560-y+CentreY,WHITE);//8
       }
}



3 楼

其实一楼说的有道理,你的这个版本太古老了,算法也不够好,你看看我这个,不会的话问我!

我来回复

您尚未登录,请登录后再回复。点此登录或注册