PDA

View Full Version : How to translate in an eclipse motion?

bailey
08-03-2012, 05:27 PM
I am working on a 2d solar system which I have completed. It is just a top down view of the solar system with circular planets and eclipse shaped orbits. Now I am trying to animate it so the planets follow the eclipse orbits. I have figured out how to do simple animation but having trouble figuring a formula to be able to use glTranslatef() to follow the same orbit eclipse. I figure there has to be some how I can tie it into my eclipse function. Below is the calls to the eclipse function as well as the eclipse function itself. Thanks for any direction you can provide!

ellipseMidpoint (xc, yc, 155, 207);
ellipseMidpoint (xc, yc, 238, 317);
ellipseMidpoint (xc, yc, 480, 640);
ellipseMidpoint (xc, yc, 753, 1003);

void ellipsePlotPoints (int xCenter, int yCenter, int x, int y)
{
setPixel (xCenter + x, yCenter + y);
setPixel (xCenter - x, yCenter + y);
setPixel (xCenter + x, yCenter - y);
setPixel (xCenter - x, yCenter - y);
}

void ellipseMidpoint (int xCenter, int yCenter, int Rx, int Ry)
{
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;

/* Plot the initial point in each quadrant. */
ellipsePlotPoints (xCenter, yCenter, x, y);

/* Region 1 */
p = ceil (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);
}

/* Region 2 */
p = ceil (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);
}
}