root/ext/gd/libgd/gd_arc.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. gdImageEllipse
  2. gdImageFilledEllipse

   1 #if HAVE_GD_BUNDLED
   2 # include "gd.h"
   3 #else
   4 # include <gd.h>
   5 #endif
   6 
   7 #include "gd_intern.h"
   8 
   9 
  10 /**
  11  * Integer Ellipse functions (gdImageEllipse and gdImageFilledEllipse)
  12  * Function added by Pierre-Alain Joye 02/08/2003 (paj@pearfr.org)
  13  * See the ellipse function simplification for the equation
  14  * as well as the midpoint algorithm.
  15  */
  16 
  17 void gdImageEllipse(gdImagePtr im, int mx, int my, int w, int h, int c)
  18 {
  19         int x=0,mx1=0,mx2=0,my1=0,my2=0;
  20         long aq,bq,dx,dy,r,rx,ry,a,b;
  21 
  22         a=w>>1;
  23         b=h>>1;
  24         gdImageSetPixel(im,mx+a, my, c);
  25         gdImageSetPixel(im,mx-a, my, c);
  26         mx1 = mx-a;my1 = my;
  27         mx2 = mx+a;my2 = my;
  28 
  29         aq = a * a;
  30         bq = b * b;
  31         dx = aq << 1;
  32         dy = bq << 1;
  33         r  = a * bq;
  34         rx = r << 1;
  35         ry = 0;
  36         x = a;
  37         while (x > 0){
  38                 if (r > 0) {
  39                         my1++;my2--;
  40                         ry +=dx;
  41                         r  -=ry;
  42                 }
  43                 if (r <= 0){
  44                         x--;
  45                         mx1++;mx2--;
  46                         rx -=dy;
  47                         r  +=rx;
  48                 }
  49                 gdImageSetPixel(im,mx1, my1, c);
  50                 gdImageSetPixel(im,mx1, my2, c);
  51                 gdImageSetPixel(im,mx2, my1, c);
  52                 gdImageSetPixel(im,mx2, my2, c);
  53         }
  54 }
  55 
  56 void gdImageFilledEllipse (gdImagePtr im, int mx, int my, int w, int h, int c)
  57 {
  58         int x=0,mx1=0,mx2=0,my1=0,my2=0;
  59         long aq,bq,dx,dy,r,rx,ry,a,b;
  60         int i;
  61         int old_y2;
  62 
  63         a=w>>1;
  64         b=h>>1;
  65 
  66         for (x = mx-a; x <= mx+a; x++) {
  67                 gdImageSetPixel(im, x, my, c);
  68         }
  69 
  70         mx1 = mx-a;my1 = my;
  71         mx2 = mx+a;my2 = my;
  72 
  73         aq = a * a;
  74         bq = b * b;
  75         dx = aq << 1;
  76         dy = bq << 1;
  77         r  = a * bq;
  78         rx = r << 1;
  79         ry = 0;
  80         x = a;
  81         old_y2=-2;
  82         while (x > 0){
  83                 if (r > 0) {
  84                         my1++;my2--;
  85                         ry +=dx;
  86                         r  -=ry;
  87                 }
  88                 if (r <= 0){
  89                         x--;
  90                         mx1++;mx2--;
  91                         rx -=dy;
  92                         r  +=rx;
  93                 }
  94                 if(old_y2!=my2){
  95                         for(i=mx1;i<=mx2;i++){
  96                                 gdImageSetPixel(im,i,my1,c);
  97                                 gdImageSetPixel(im,i,my2,c);
  98                         }
  99                 }
 100                 old_y2 = my2;
 101         }
 102 }
 103 
 104 

/* [<][>][^][v][top][bottom][index][help] */