I found a ellipse routine
here, and I ported it:
Code:
#define ROUND(a) ((int) (a + 0.5))
void ellipsePlotPoints(int xCenter, int yCenter, int x, int y, int color){
plot(xCenter + x, yCenter + y, color);
plot(xCenter - x, yCenter + y, color);
plot(xCenter + x, yCenter - y, color);
plot(xCenter - x, yCenter - y, color);
}
void drawEllipse(int xCenter, int yCenter, int Rx, int Ry, int color){
int Rx2 = Rx*Rx;
int Ry2 = Ry*Ry;
int twoRx2 = 2 * Rx2;
int twoRy2 = 2 * Ry2;
int p;
int x = 0;
int y = Ry;
int px = 0;
int py = twoRx2 * y;
ellipsePlotPoints(xCenter, yCenter, x, y, color);
/* For Region 1 */
p = ROUND(Ry2 - (Rx2*Ry) + (0.25) * Rx2);
while(px < py){
x++;
px += twoRy2;
if(p < 0){
p += Ry2 + px;
}else{
y--;
py -= twoRx2;
p += Ry2 + px - py;
}
ellipsePlotPoints(xCenter, yCenter, x, y, color);
}
/* For Region 2*/
p = ROUND(Ry2 * (x + 0.5)*(x + 0.5) + Rx2 * (y - 1)*(y - 1) - Rx2 * Ry2);
while(y > 0){
y--;
py -= twoRx2;
if(p > 0){
p += Rx2 - py;
}else{
x++;
px += twoRy2;
p += Rx2 - py + px;
}
ellipsePlotPoints(xCenter, yCenter, x, y, color);
}
}
Maybe Kerm could use it for LuaZM?
The problem with it is that when the Ry is <=0, it draws 2 dots instead of an ellipse.
Enjoy!