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

📄 bresenham_ellipse

📁 下载来的一个看图软件的源代码
💻
字号:
void gdImageEllipse (gdImagePtr im, int cx, int cy, int w, int h, int color){  long d, b_sq, b_sq_4, b_sq_6;  long a_sq, a_sq_4, a_sq_6;  int x, y, switchem;  long lsqrt (long);  int pix, half, pstart;  int thick = im->thick;  half = thick / 2;  w /= 2;			/* ImageArc uses diameter, not radius */  h /= 2;  d = 2 * (long) h *h + (long) w *w - 2 * (long) w *w * h;  b_sq = (long) h *h;  b_sq_4 = 4 * (long) h *h;  b_sq_6 = 6 * (long) h *h;  a_sq = (long) w *w;  a_sq_4 = 4 * (long) w *w;  a_sq_6 = 6 * (long) w *w;  x = 0;  y = -h;  switchem = a_sq / lsqrt (a_sq + b_sq);  while (x <= switchem)    {      pstart = y - half;      for (pix = pstart; pix < pstart + thick; pix++)	{	  gdImageSetPixel (im, cx + x, cy + pix, color);	  gdImageSetPixel (im, cx - x, cy + pix, color);	  gdImageSetPixel (im, cx + x, cy - pix, color);	  gdImageSetPixel (im, cx - x, cy - pix, color);	}      if (d < 0)	d += b_sq_4 * x++ + b_sq_6;      else	d += b_sq_4 * x++ + b_sq_6 + a_sq_4 * (++y);    }  /* Middlesplat!     ** Go a little further if the thickness is not nominal...   */  if (thick > 1)    {      int xp = x;      int yp = y;      int dp = d;      int thick2 = thick + 2;      int half2 = half + 1;      while (xp <= switchem + half)	{	  pstart = yp - half2;	  for (pix = pstart; pix < pstart + thick2; pix++)	    {	      gdImageSetPixel (im, cx + xp, cy + pix, color);	      gdImageSetPixel (im, cx - xp, cy + pix, color);	      gdImageSetPixel (im, cx + xp, cy - pix, color);	      gdImageSetPixel (im, cx - xp, cy - pix, color);	    }	  if (dp < 0)	    dp += b_sq_4 * xp++ + b_sq_6;	  else	    dp += b_sq_4 * xp++ + b_sq_6 + a_sq_4 * (++yp);	}    }  d += -2 * (long) b_sq + 2 * (long) a_sq - 2 * (long) b_sq *(x - 1) + 2 * (long) a_sq *(y - 1);  while (y <= 0)    {      pstart = x - half;      for (pix = pstart; pix < pstart + thick; pix++)	{	  gdImageSetPixel (im, cx + pix, cy + y, color);	  gdImageSetPixel (im, cx - pix, cy + y, color);	  gdImageSetPixel (im, cx + pix, cy - y, color);	  gdImageSetPixel (im, cx - pix, cy - y, color);	}      if (d < 0)	d += a_sq_4 * y++ + a_sq_6 + b_sq_4 * (++x);      else	d += a_sq_4 * y++ + a_sq_6;    }}

⌨️ 快捷键说明

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