Jump to content
  • Advertisement
Sign in to follow this  

rotating objects in a double orbit

This topic is 2135 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I have a object at the center. Other set of objects rotating around center in first orbit. Now i want other objects to rotate around the objects in 1st orbit.


n the above fig, set of triangles are rotating around the square and circles are rotating around the triangle. I have the code which works for 1st orbit, but i am not able to render that second orbit.

void display()
for (int k = 0; k < 10; k++)

distance_x = 0.4 * cos(angle1*3.14 / 180);
distance_y = 0.4 * sin(angle1*3.14 / 180);
angle1 += 60;
glRotatef(i, 0.0f, 0.0f, 1.0f);
glTranslatef(distance_x, distance_y, 0.0f);
glRotatef(-i, 0.0f, 0.0f, 1.0f);


I am calling display in loop. i is static global variable. which transformations will do the second orbit?

Share this post

Link to post
Share on other sites

Well, you should know the concepts of relative coordinate system and world coordinate system. Your triangles should save your relative point list and the center point. Then update the relative point list when rotate for some radius and redraw it. Give some simple code:

#define PI 3.1415926535

typedef struct 
    double x, y;
typedef class Triangle
    POINT pointList[3];
    POINT centerPoint;
    Triangle() { };  // Constructor
    ~Triangle() { };  // Destructor
    BOOL Draw();    // Realize your Draw method
    BOOL Rotate(double theta);    // Rotate method

BOOL TRIANGLE::Rotate(double theta)
    double cosVal, sinVal;
    for (int i = 0; i < 3; i++)
        cosVal = cos(theta * PI / 180);
        sinVal = sin(theta * PI / 180);
        // Compute the relative coordinate after rotate
        this->pointList[i].x = this->pointList[i].x * cosVal - this->pointList[i].y * sinVal;
        this->pointList[i].y = this->pointList[i].x * sinVal + this->pointList[i].y * cosVal;
    return this->Draw();

    // In your draw method, you should change your relative coordinate to world coordinate.

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!