• Create Account

# 2D Coordinate Determination: How to determine coordinates from a line intersection?

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

3 replies to this topic

### #1asperatology  Members   -  Reputation: 681

Like
0Likes
Like

Posted 04 October 2012 - 05:47 AM

Here's a diagram beautifully depicting the problem.

Note: The pink line is the purple center line's radius length, not the black outer line's radius.

### #2clb  Members   -  Reputation: 2143

Like
0Likes
Like

Posted 04 October 2012 - 06:12 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.
Me+PC=clb.demon.fi | C++ Math and Geometry library: MathGeoLib, test it live! | C++ Game Networking: kNet | 2D Bin Packing: RectangleBinPack | Use gcc/clang/emcc from VS: vs-tool | Resume+Portfolio | gfxapi, test it live!

### #3Brother Bob  Moderators   -  Reputation: 10027

Like
2Likes
Like

Posted 04 October 2012 - 06:14 AM

Do you want the point that is Radius units away from Center in the direction towards Ball? In that case, take the vector from Center to Ball, normalize it, multiply it by Radius and add it to Center.

### #4asperatology  Members   -  Reputation: 681

Like
0Likes
Like

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?

Ah. I'm sorry for the image's vague description. I'll try answering the questions respective to the questions:
• The intersection where the blue line meets the pink line.
• A 2D solid circle in red is a ball, and a curve in pink is the center line, which is a line consisting of infinite center points of the black outline. The thick curve is the shape of an obstacle. It's not a thick circle, nor a hollow circle which was specified by the pink area.
• The input data for the ball consists of a vector position, vector speed, and vector acceleration. The obstacle (black lines) contains only the vector position of the center and the radius of the pink curve's distance.
• The expected output data would be to retrieve a vector point that is the intersection of the blue line and the pink curve.

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.