Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define incx() x++, dxt += d2xt, t += dxt
- #define incy() y--, dyt += d2yt, t += dyt
- void ellipse(int xc, int yc, int rx, int ry, int color)
- {
- int x = 0, y = ry;
- long rx2 = (long)rx*rx, ry2 = (long)ry*ry;
- long crit1 = -(rx2/4 + rx%2 + ry2);
- long crit2 = -(ry2/4 + ry%2 + rx2);
- long crit3 = -(ry2/4 + ry%2);
- long t = -rx2*y; // e(x+1/2,y-1/2) - (a^2+b^2)/4
- long dxt = 2*ry2*x, dyt = -2*rx2*y;
- long d2xt = 2*ry2, d2yt = 2*rx2;
- while (y>=0 && x<=rx)
- {
- pixel(xc+x, yc+y, color);
- if (x!=0 || y!=0)
- pixel(xc-x, yc-y, color);
- if (x!=0 && y!=0)
- {
- pixel(xc+x, yc-y, color);
- pixel(xc-x, yc+y, color);
- }
- if (t + ry2*x <= crit1 || //e(x+1,y-1/2) <= 0
- t + rx2*y <= crit3) //e(x+1/2,y) <= 0
- incx();
- else if (t - rx2*y > crit2) //e(x+1/2,y-1) > 0
- incy();
- else
- {
- incx();
- incy();
- }
- }
- }
- #define incx() do { x++; dxt += d2xt; t += dxt; } while (0)
- #define incy() do { y--; dyt += d2yt; t += dyt; } while (0)
- cpp cpp.c > cppout.c
- # 1 "cpp.c"
- # 1 "<built-in>"
- # 1 "<command-line>"
- # 1 "cpp.c"
- void ellipse(int xc, int yc, int rx, int ry, int color)
- {
- int x = 0, y = ry;
- long rx2 = (long)rx*rx, ry2 = (long)ry*ry;
- long crit1 = -(rx2/4 + rx%2 + ry2);
- long crit2 = -(ry2/4 + ry%2 + rx2);
- long crit3 = -(ry2/4 + ry%2);
- long t = -rx2*y;
- long dxt = 2*ry2*x, dyt = -2*rx2*y;
- long d2xt = 2*ry2, d2yt = 2*rx2;
- while (y>=0 && x<=rx)
- {
- pixel(xc+x, yc+y, color);
- if (x!=0 || y!=0)
- pixel(xc-x, yc-y, color);
- if (x!=0 && y!=0)
- {
- pixel(xc+x, yc-y, color);
- pixel(xc-x, yc+y, color);
- }
- if (t + ry2*x <= crit1 ||
- t + rx2*y <= crit3)
- x++, dxt += d2xt, t += dxt;
- else if (t - rx2*y > crit2)
- y--, dyt += d2yt, t += dyt;
- else
- {
- x++, dxt += d2xt, t += dxt;
- y--, dyt += d2yt, t += dyt;
- }
- }
- }
- if (t + ry2*x <= crit1 ||
- t + rx2*y <= crit3) {
- x++;
- dxt += d2xt;
- t += dxt;
- } else if (t - rx2*y > crit2) {
- y--;
- dyt += d2yt;
- t += dyt;
- } else {
- x++;
- dxt += d2xt;
- t += dxt;
- y--;
- dyt += d2yt;
- t += dyt;
- }
- #define incx() x++, dxt += d2xt, t += dxt
- if (t + ry2*x <= crit1 || t + rx2*y <= crit3)
- incx();
- if (t + ry2*x <= crit1 || t + rx2*y <= crit3)
- x++, dxt += d2xt, t += dxt;
- void ellipse(int xc, int yc, int rx, int ry, int color)
- {
- int x = 0, y = ry;
- long rx2 = (long)rx*rx, ry2 = (long)ry*ry;
- long crit1 = -(rx2/4 + rx%2 + ry2);
- long crit2 = -(ry2/4 + ry%2 + rx2);
- long crit3 = -(ry2/4 + ry%2);
- long t = -rx2*y; // e(x+1/2,y-1/2) - (a^2+b^2)/4
- long dxt = 2*ry2*x, dyt = -2*rx2*y;
- long d2xt = 2*ry2, d2yt = 2*rx2;
- while (y>=0 && x<=rx)
- {
- pixel(xc+x, yc+y, color);
- if (x!=0 || y!=0)
- pixel(xc-x, yc-y, color);
- if (x!=0 && y!=0)
- {
- pixel(xc+x, yc-y, color);
- pixel(xc-x, yc+y, color);
- }
- if (t + ry2*x <= crit1 || //e(x+1,y-1/2) <= 0
- t + rx2*y <= crit3) //e(x+1/2,y) <= 0
- x++, dxt += d2xt, t += dxt;
- else if (t - rx2*y > crit2) //e(x+1/2,y-1) > 0
- y--, dyt += d2yt, t += dyt;
- else
- {
- x++, dxt += d2xt, t += dxt;
- y--, dyt += d2yt, t += dyt;
- }
- }
- }
Add Comment
Please, Sign In to add comment