Aaah, the many ways of doing continuous collision. After looking at conservative advancement in Box2D, I realized it just wasn’t what I needed. I wanted a process that could finish in one iteration. So I started looking at sweep tests, and my first was circle-circle sweeps.

Basically circle-circle sweeps are a quadratic equation, where A is the relative velocity squared, B is two times the relative velocity dotted with their relative position, and C is their relative position squared minus the sum of their radii squared. BLARGH! So, here’s the math:

v is a vector describing their relative velocity

p is a vector describing their relative position

A=v^2

B=2*v*p,

C=p^2-radii^2

Then you just crunch that with the good ol’ quadratic formula and the smallest of your two roots is the time of impact. The larger root would be the time they separate after passing through eachother, but who the fuck needs that? Not me. Here’s a picture. Joooocy peeectoooor. Yaaaaah.

Aaaaw yeeeaaaah. It’s an exact answer too, no dicking around with approximations.

Polygons might be trickier though. I CAN get an exact answer using extended separating axis, (where each axis’ interval is extended by the velocity component dotted with said axis,) but it is only a result given linear velocity. When you have screw motion, it becomes approximate, because a lot can change between now and projected time of impact when they rotate. You may wind up hitting totally wrong, or worse, missing just as badly. So, I may need conservative advancement for this one, or else I’ll have to dig for papers on Google about more advanced methods my feeble brain can barely comprehend.

More on this later. For now, I will headbang. To Dream Theater.