Back to index

php5  5.3.10
gd_arc.c
Go to the documentation of this file.
00001 #if HAVE_GD_BUNDLED
00002 # include "gd.h"
00003 #else
00004 # include <gd.h>
00005 #endif
00006 
00007 #include "gd_intern.h"
00008 
00009 
00017 void gdImageEllipse(gdImagePtr im, int mx, int my, int w, int h, int c)
00018 {
00019        int x=0,mx1=0,mx2=0,my1=0,my2=0;
00020        long aq,bq,dx,dy,r,rx,ry,a,b;
00021 
00022        a=w>>1;
00023        b=h>>1;
00024        gdImageSetPixel(im,mx+a, my, c);
00025        gdImageSetPixel(im,mx-a, my, c);
00026        mx1 = mx-a;my1 = my;
00027        mx2 = mx+a;my2 = my;
00028 
00029        aq = a * a;
00030        bq = b * b;
00031        dx = aq << 1;
00032        dy = bq << 1;
00033        r  = a * bq;
00034        rx = r << 1;
00035        ry = 0;
00036        x = a;
00037        while (x > 0){
00038               if (r > 0) {
00039                      my1++;my2--;
00040                      ry +=dx;
00041                      r  -=ry;
00042               }
00043               if (r <= 0){
00044                      x--;
00045                      mx1++;mx2--;
00046                      rx -=dy;
00047                      r  +=rx;
00048               }
00049               gdImageSetPixel(im,mx1, my1, c);
00050               gdImageSetPixel(im,mx1, my2, c);
00051               gdImageSetPixel(im,mx2, my1, c);
00052               gdImageSetPixel(im,mx2, my2, c);
00053        }
00054 }
00055 
00056 void gdImageFilledEllipse (gdImagePtr im, int mx, int my, int w, int h, int c)
00057 {
00058        int x=0,mx1=0,mx2=0,my1=0,my2=0;
00059        long aq,bq,dx,dy,r,rx,ry,a,b;
00060        int i;
00061        int old_y1,old_y2;
00062 
00063        a=w>>1;
00064        b=h>>1;
00065 
00066        for (x = mx-a; x <= mx+a; x++) {
00067               gdImageSetPixel(im, x, my, c);
00068        }
00069 
00070        mx1 = mx-a;my1 = my;
00071        mx2 = mx+a;my2 = my;
00072 
00073        aq = a * a;
00074        bq = b * b;
00075        dx = aq << 1;
00076        dy = bq << 1;
00077        r  = a * bq;
00078        rx = r << 1;
00079        ry = 0;
00080        x = a;
00081        old_y2=-2;
00082        old_y1=-2;
00083        while (x > 0){
00084               if (r > 0) {
00085                      my1++;my2--;
00086                      ry +=dx;
00087                      r  -=ry;
00088               }
00089               if (r <= 0){
00090                      x--;
00091                      mx1++;mx2--;
00092                      rx -=dy;
00093                      r  +=rx;
00094               }
00095               if(old_y2!=my2){
00096                      for(i=mx1;i<=mx2;i++){
00097                             gdImageSetPixel(im,i,my1,c);
00098                      }
00099               }
00100               if(old_y2!=my2){
00101                      for(i=mx1;i<=mx2;i++){
00102                             gdImageSetPixel(im,i,my2,c);
00103                      }
00104               }
00105               old_y2 = my2;
00106               old_y1 = my1;
00107        }
00108 }
00109 
00110