⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4.4.c

📁 计算机图形学
💻 C
字号:
/* WIN-TC BGI 图形编程模板 */

#include "Conio.h"
#include "graphics.h"
#include "stdio.h"
#include "math.h"
#define closegr closegraph
#define xo 300
#define yo 250
#define DELTA 0.0
#define max 100
/*最大顶点数*/

typedef struct
 {int x;
  int y;
}Point;

typedef struct
{int pointNum;
 Point *vertices;
 }Polygon;

void initgr(void) /* BGI初始化 */
{
  int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
  registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
  initgraph(&gd, &gm, "");
}
/*控制线宽*/
void putpixels(int x,int y,int color,int n)
{ int i,j;
  for(i=-n/2;i<=n/2;i++)
      for(j=-n/2;j<=n/2;j++)
        putpixel(x+j,y+i,color);

}
void putpixelsh(int x,int y,int color,int n)
{int i;
for(i=-n/2;i<=n/2;i++)
 putpixel(x,y+i,color);
}
void putpixelx(int x,int y,int color,int n)
{int i;
for(i=-n/2;i<=n/2;i++)
 putpixel(x+i,y,color);
}
/*画点*/
void EllipsePoints(int x,int y,int color,int n)/*y=x上方*/
{putpixelsh(xo+x,yo+y,color,n);
 putpixelsh(xo-x,yo+y,color,n);
 putpixelsh(xo+x,yo-y,color,n);
 putpixelsh(xo-x,yo-y,color,n);
 }
void EllipsePointx(int x,int y,int color,int n)/*y=x下方*/
{putpixelx(xo+x,yo+y,color,n);
 putpixelx(xo-x,yo+y,color,n);
 putpixelx(xo+x,yo-y,color,n);
 putpixelx(xo-x,yo-y,color,n);
 }
void CirclePoints(int x,int y,int color,int n)
{putpixels(xo+x,yo+y,color,n);
 putpixels(xo+y,yo+x,color,n);
 putpixels(xo-y,yo+x,color,n);
 putpixels(xo-x,yo+y,color,n);
 putpixels(xo+y,yo-x,color,n);
 putpixels(xo+x,yo-y,color,n);
 putpixels(xo-x,yo-y,color,n);
 putpixels(xo-y,yo-x,color,n);
 }

/*画圆*/
void MidPointCircle(int radius,int color,int n)
/*生成圆弧的中点算法*/
{int x,y;
 float d;
 x=0;
 y=radius;
 d=5.0/4-radius;
 CirclePoints(x,y,color,n);
 while(y>x)
 {if(d<=0)
  d+=2.0*x+3;
  else
   {d+=2.0*(x-y)+5;
    y--;
    }
   x++;
   CirclePoints(x,y,color,n);
   }
  }
void PositiveNegativeArc(int radius,int color,int n)
/* 正负法生成圆弧 */
{int x,y,d;
 x=0;
 y=radius;
 EllipsePoints(x,y,color,n);
 x=1;
 EllipsePoints(x,y,color,n);
 d=1;
 while(y>=0)
 {if(y>x)
{
 if(d>=0)
 {d=d-2*y+1;
 y--;
 }
 else
 {d=d+2*x+1;
 x++;
 }
  EllipsePoints(x,y,color,n);
} /*end of if*/
  else
{
 if(d>=0)
 {d=d-2*y+1;
 y--;
 }
 else
 {d=d+2*x+1;
 x++;
 }
  EllipsePointx(x,y,color,n);
}
 }/*end of while*/
 }/*end*/
main()
{
  initgr(); /* BGI初始化 */
  MidPointCircle(200,2,10);
  PositiveNegativeArc(150,4,10);
  getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
  closegr(); /*恢复TEXT屏幕模式 */
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -