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

📄 4.3.c

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

#include "Conio.h"
#include "graphics.h"
#include<math.h>
#define closegr closegraph

void initgr(void) /* BGI初始化 */
{int gd=DETECT,gm=0; /* 和gd=VGA,gm=VGAHI是同样效果 */
 registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
 initgraph(&gd,&gm,"");
}

void EllipsePoints(int x0,int y0,int x,int y,int color)
                  /*绘椭圆弧上对称的四个像素*/
{ putpixel(x0+x,y0+y,color);
  putpixel(x0-x,y0+y,color);
  putpixel(x0+x,y0-y,color);
  putpixel(x0-x,y0-y,color);
}


void MidPointEllipse(int x0,int y0,int a,int b,int color)
/*假定椭圆的中心在原点,a和b分别为两个半轴的长度*/
{long x,y,d,xP,yP,squarea,squareb;
 squarea=a*a;
 squareb=b*b;
 /*计算分界点P*/
 xP=(0.5+(float)squarea/sqrt((float)(squarea+squareb)));
 yP=(0.5+(float)squareb/sqrt((float)(squarea+squareb)));
 /*生成第一象限内的上半部分椭圆弧*/
 x=0;
 y=b;
 d=4*(squareb-squarea*b)+squarea;
 EllipsePoints(x0,y0,x,y,color);
 while(x<=xP)
 {if(d<=0)
    d+=4*squareb*(2*x+3);
  else
   {d+=4*squareb*(2*x+3)-8*squarea*(y-1);
    y--;
    }
    x++;
    EllipsePoints(x0,y0,x,y,color);
  }
  x=a;
  y=0;
  d=4*(squarea-a*squareb)+squareb;
  EllipsePoints(x0,y0,x,y,color);
  while(y<yP)
  {if(d<=0)
      d+=4*squarea*(2*y+3);
   else
   {d+=4*squarea*(2*y+3)-8*squareb*(x-1);
   x--;
   }
   y++;
   EllipsePoints(x0,y0,x,y,color);
   }
   }
void PositiveNegativeArcEllipse(int x0,int y0,int a,int b,int color)
/*假定椭圆的中心在原点,a和b分别为两个半轴的长度*/
{long x,y,d,xP,yP,squarea,squareb;
 squarea=a*a;
 squareb=b*b;
 /*计算分界点P*/
 xP=(0.5+(float)squarea/sqrt((float)(squarea+squareb)));
 yP=(0.5+(float)squareb/sqrt((float)(squarea+squareb)));
 /*生成第一象限内的上半部分椭圆弧*/
 x=0;
 y=b;
 d=b*b;
 EllipsePoints(x0,y0,x,y,color);
 x=1;
 EllipsePoints(x0,y0,x,y,color);
 while(x<=xP)
 {if(d>=0)
    {d+=a*a-2*a*a*y;
     y--;
     }
  else
   {d+=b*b+2*b*b*x;
    x++;
    }
    EllipsePoints(x0,y0,x,y,color);
  }
  x=a;
  y=0;
  d=a*a;
  EllipsePoints(x0,y0,x,y,color);
  y=1;
  while(y<yP)
  {if(d<0)
      {d+=a*a+2*y*a*a;
       y++;
       }
   else
   {d+=b*b-2*b*b*x;
   x--;
   }
   EllipsePoints(x0,y0,x,y,color);
   }
   }


main()
{initgr(); /* BGI初始化 */

 MidPointEllipse(320,240,160,100,3);
 PositiveNegativeArcEllipse(320,240,50,100,6);

 getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
 closegr(); /* 恢复TEXT屏幕模式 */
}

⌨️ 快捷键说明

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