Hmmm... I figured that my problem would be child's play on a Web site with forums like "Differential Geometry", "Calculus", and "Advanced Applied Math". Apparently not. Us lesser minds will have to do our best, I guess. I'll share the approach I've been working on, hoping for a better answer:
The basic approach to this problem I have been exploring is to see the situation as a distance graph and to find some way to analyze the graph that tells me if a collision has occurred. That is, a graph where the y-axis is the distance between the center of the two circles, and the x-axis is time -- specifically, the frame of time in which I am testing for collision (likely only a few milliseconds in the video game). The solution to the question of "has a collision occurred" is the same as "does the distance graph ever dip low enough that the value is less than or equal to the sum of the radii of the circles?" But the difficult question is, how do I figure that out (efficiently).
One method is calculate lots of points on the graph, and test if any are low enough. The more points I test, the more likely my result is to be correct. A workable approach, but perhaps too CPU intensive...?
Another approach is an estimate, that should be accurate enough most of the time:
Logically, If the velocity of the two objects does not change, and we are limiting ourselves to a finite time frame, all distance graphs should fit one of four types:
1. A single straight line with a positive slope. This is the case in which the path of the two objects do not intersect (in the limited time frame) but are moving farther apart.
2. A single straight line with a negative slope. The paths do not intersect, but are moving closer together.
3. A single straight line with a zero slope. The two objects have the same velocity (i.e., direction and speed).
4. A "V" shape, in which the distance decreases steadily, but then begins to increase steadily at some point. This is either the case in which the two paths actually intersect (zero distance) or the two objects pass by each other at close proximity (heading opposite directions).
If I were to test the distance at the first instance of time and then the last distance of time, this would be a sufficient test to cover the first three graph types mention above. But what if it is a V shaped graph? Well, I could also get one point just a little bit to the right of the first point on the graph, and one point just a little bit to the left of the last point on the graph, and use these four points to calculate the slope of the two lines of the V-shape. If I then treated the distance graph itself like geometry, I could use the two slopes to calculate the intersection point of the V, which would be the bottom most point. If the bottom most point is less than or equal to the sum of the circle radii, then I have a collision. Otherwise, I don't.
The problem with this approach is the marginal cases, in which the dip in the V occurs in between the first and second point, or the third and last point, which then might give me an intersection higher than the real one. But in such marginal cases, the objects will likely be close enough that the initial point and last point tests would have detected a collision anyway. Yet, there is still a chance of a detection failure.
This would be much easier if their was someway to measure "negative distance", as is the case of two objects moving on a one-dimensional plane. (Just subtract the first point from the second, and after they pass each other, the distance will be negative.) Then I could just figure out whether or not the distance graph crosses the x-axis. But I do not know how to get a meaningful "negative distance" in a 2-D distance calculation using the pythagorean theorem.
So, that's the best I've got so far. If all that seems silly to you math geniuses, I'm certainly open to better suggestions.