[Day 91] Rotation problem

I been stuck on this for a bit and since I'm not too great at math, I am wondering why it's not rotating around the center circle.

Here's a video:
https://www.youtube.com/watch?v=IRa4U2gZLLE

Both of squares seem to be circling a center of their own and end up hitting the first block (looks kind of cool but it's wrong).

I had my all of my code on github but I took it off because it might cause problems with Handmade hero. Here's the code in pasebin,but
before looking, peeking or whatever, I want to let you know that I'm using Linux, SDL by David Kim on Mint Linux (sorry if I'm wrong) and I also try to avoid copying Casey's code so the code is different from the actual source with the almost same concepts (I say almost because I think I'm doing some things wrong).

http://pastebin.com/4BP5NZRL


Thanks!
The video seems to be marked private?

Slightly off topic: doesn't the fact that HH preorders now come with a GitHub access code mean you can still use GitHub, you just do it in the Handmade Hero repository or whatever? And it remains private? I feel like that is how that works? You just fork the cpp repo, and then replace whatever you want, or something like this?

- Casey
Without video it's hard to be sure (and I'm not really sure what's going on in your code with player.x.x), but from your description it sounds like you're rotating around the wrong center.

When you apply a rotation, it *always* rotates around the origin (0, 0). So if you want to rotate around some other point, you need to translate to the origin, do your rotation, and translate back.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
vec2 p = ...
vec2 center = ...

// Translate the center of rotation to the origin.  (p - center)
float x = p.x - center.x;
float y = p.y - center.y;

// Do the rotation
float angle = ...
float ct = cosf(angle);
float st = sinf(angle);

vec2 new_p;
new_p.x = (x * ct) + (y * -st);
new_p.y = (x * st) + (y * ct);

// Translate back.  (p + center);
new_p += center;

(If you do a lot of these, you'll want to bake them into a matrix instead. But it's the same process.)

What you are actually rotating is not the point, but the *vector* to that point from the center of rotation.

Edited by Bryan Taylor on Reason: I'm terrible at linear algebra, apparently.
Oops I forgot to push "publish", sorry about that.

Thanks, btaylor,2401, I'll try it out!!