
Note: The pink line is the purple center line's radius length, not the black outer line's radius.
Posted 04 October 2012 - 06:12 AM
1. Project posA to B. That is, compute projB = posB + (posA-posB).Normalized() * rB; 2. Compute the distance of projB to the circle A. distance = (posA - projB).Length(); 3. if (distance < rA) return intersection at point projB; else return no intersection;
Posted 04 October 2012 - 06:14 AM
Posted 04 October 2012 - 09:19 AM
Unfortunately, an image lacks formal rigor. What kind of intersection are you computing exactly? You have a 2D solid circle drawn in red, and a curve specified in pink? or a thick curve specified by the black outline? or a thick circle specified by the black area? or a hollow circle specified by the pink area? What is your input data? What is your expected output data?
I'm going to guess that you want to compute the point where a solid 2D circle (red) specified by A=(posA, rA) intersects a hollow 2D circle (pink) specified by B=(posB, rB):
1. Project posA to B. That is, compute projB = posB + (posA-posB).Normalized() * rB; 2. Compute the distance of projB to the circle A. distance = (posA - projB).Length(); 3. if (distance < rA) return intersection at point projB; else return no intersection;
If you instead are computing an intersection against a thick 2D "ring" formed by extruding the pink hollow circle by a distance d, do the same as above, but at step 3, do a if (distance < rA + d) instead.