回 帖 发 新 帖 刷新版面

主题:[原创]用C写的一个旋转的八卦图

#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void mysector(int x,int y,int startangle,int endangle,int rx,int ry);

main()
{
  int graphdriver=VGA,  graphmode=VGAHI  ;
  int x0=320,y0=240;
  int degree=0;
  int size=0;
  void *buffer=NULL;
  int xt=0,yt=0;
  struct palettetype palette;
  registerbgidriver(EGAVGA_driver);/*如果编译通不过,除掉此句*/
  initgraph(&graphdriver,&graphmode,"");/*引号中加入TC的目录 如c:\\tc  */
  cleardevice();
  size=imagesize(160,80,320,320);
  buffer=malloc(size);
  getimage(160,80,320,320,buffer);
  getpalette(&palette);

  while(!kbhit())
  {
  putimage(160,80,buffer,COPY_PUT);
  setcolor(15);
  circle(x0,y0,160);
  degree=(degree+10)%360;
  xt=(int)80* sin( (degree+90)*(2*M_PI)/360  ) ;
  yt=(int)80* cos( (degree+90)*(2*M_PI)/360  ) ;

  /*-----------------------------*/
  setfillstyle(1,15);
  mysector(x0,y0,  0+degree,180+degree,160,160);   /* semicircle_top */
  setfillstyle(1,0);
  mysector(x0,y0,180+degree,360+degree,160,160);   /*  semicircle_bottom */
 /*------------------------------*/
  setcolor(0);
  setfillstyle(1,0);
  mysector(x0+xt,y0+yt, 0+degree,180+degree,80,80);   /*right semicircle */

  setcolor(15);
  setfillstyle(1,15);
  mysector(x0-xt,y0-yt,180+degree,360+degree,80,80);   /*left semicircle*/
/*-----------------------------*/

  setcolor(15);
  setfillstyle(1,15);
  mysector(x0+xt,y0+yt,0,360,30,30);      /*right small circle  */

  setcolor(0);
  setfillstyle(1,0);
  mysector(x0-xt,y0-yt,0,360,30,30);       /*left small circle */

/* ------------ --------------------*/
  getimage(160,80,320,320,buffer);
 /* cleardevice();  */
}
  getch();
  closegraph();
}
/*--------------------------------------------------*/
void mysector(int x,int y,int startangle,int endangle,int rx,int ry)
{
 /* if(endangle>720) endangle=endangle-360;*/
  if(startangle<360 && endangle>360)
  {
   sector(x, y,startangle,  360,rx,ry);
   sector(x, y, 0, endangle-360,rx,ry);
   }
 else if(startangle==360)
 sector(x, y,0,endangle-360,rx,ry);
 else if(startangle>360 && endangle>360)
 sector(x,y,startangle-360,endangle-360,rx,ry);
 else sector(x,y,startangle,endangle,rx,ry);
}

回复列表 (共32个回复)

21 楼


Linker Error:Undefined Symbol ‘_EGAVGA_driver' in module bg.c
 是怎么得哦

22 楼

registerbgidriver(EGAVGA_driver);/*如果编译通不过,除掉此句*/
  initgraph(&graphdriver,&graphmode,"");/*引号中加入TC的目录 如c:\\tc  */
照楼主说的:
    除掉第一句,在" "中加上你电脑上Tc程序的具体路径就可以了,路径中只准有英文
可以临时该一下你的路径

23 楼

上楼说的问题很容易解决,去google一下“TC的图形编程”就可找到解决方法。

24 楼

Undefined symbol '_EGAVGA_driver'

25 楼


http://www.blogcn.com/u/48/40/xiazai8/blog/30498192.html下载win-tc

26 楼

你编时用的头文件
<graphics.h> 
是不是自己定义的
我在
Microsoft Visual C++ 6.0
 
不能通过 !

27 楼

怎么我编译出来的 图形 闪烁好厉害了啊`

28 楼

在TC中,是有几个错误,不过解决了...:)
#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void mysector(int x,int y,int startangle,int endangle,int rx,int ry);

main()
{
  int graphdriver=VGA,  graphmode=VGAHI  ;
  int x0=320,y0=240;
  int degree=0;
  int size=0;
  void *buffer=NULL;
  int xt=0,yt=0;
  struct palettetype palette;
  registerbgidriver(EGAVGA_driver); /*这一句我也去掉了*/
  initgraph(&graphdriver,&graphmode,"") ;/*这里应该有个分号*/
  cleardevice();
  size=imagesize(160,80,320,320);
  buffer=malloc(size);
  getimage(160,80,320,320,buffer);
  getpalette(&palette);

  while(!kbhit())
  {
  putimage(160,80,buffer,COPY_PUT);
  setcolor(15);
  circle(x0,y0,160);
  degree=(degree+10)%360;
  xt=(int)80* sin( (degree+90)*(2*M_PI)/360  ) ;
  yt=(int)80* cos( (degree+90)*(2*M_PI)/360  ) ;

 
  setfillstyle(1,15);
  mysector(x0,y0,  0+degree,180+degree,160,160);  
  setfillstyle(1,0);
  mysector(x0,y0,180+degree,360+degree,160,160);  
 
  setcolor(0);
  setfillstyle(1,0);
  mysector(x0+xt,y0+yt, 0+degree,180+degree,80,80);   
  setfillstyle(1,15);
  mysector(x0-xt,y0-yt,180+degree,360+degree,80,80);  

  setcolor(15);
  setfillstyle(1,15);
  mysector(x0+xt,y0+yt,0,360,30,30);    
  setcolor(0);
  setfillstyle(1,0);
  mysector(x0-xt,y0-yt,0,360,30,30);       
 
  getimage(160,80,320,320,buffer);
 
}
  getch();
  closegraph();
}
 
void mysector(int x,int y,int startangle,int endangle,int rx,int ry)
{
  
  if(startangle<360 && endangle>360)
  {
   sector(x, y,startangle,  360,rx,ry);
   sector(x, y, 0, endangle-360,rx,ry);
   }
 else if(startangle==360)
 sector(x, y,0,endangle-360,rx,ry);
 else if(startangle>360 && endangle>360)
 sector(x,y,startangle-360,endangle-360,rx,ry);
 else sector(x,y,startangle,endangle,rx,ry);

29 楼

汗,遇到十四楼同志说的问题了....

30 楼

问题终于解决了。。。

我来回复

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