Re: Distance between segments
- From: matt271829-news@xxxxxxxxxxx
- Date: 15 Jun 2006 06:21:37 -0700
zaknospam@xxxxxxxxx wrote:
Hi NG!
I have a little problem, and I hope that someone may help me...
I have two finite 2D line segments, and I have to find:
1) the parts of the two segments that are near a certain distance.
What on earth does "near a certain distance" mean?
2) the two points on each segment that are nearest
I mean:
- if the segment A is defined by its two ending points Pa0=(Xa0, Ya0),
Pa1=(Xa1, Ya1)
- if the segment B is defined by its two ending points Pb0=(Xb0, Yb0),
Pb1=(Xb1, Yb1)
I have to find:
- the starting and ending position on A (measured as distances from
Pa0) of the part of the segment which points are far less than a fixed
distance D from B
What does "far less than a fixed distance D" mean? If you want an exact
answer then you need to give an exact problem statement. Something like
"less than a fixed distance D" for example.
- the same as above for the segment B
- the position on A and on B where they are nearest
I've tried to do all that on my own, but after some time (well, In fact
a lot of time) I'm giving up...
Does anyone can help this depressed guy?
Thank you a lot!
As indicated, I don't understand question 1. As far as question 2 is
concerned...
I'll denote the line segments (x1,y1) - (x2,y2) and (x3,y3) - (x4,y4).
There are several cases to consider.
If the lines intersect at a point lying on both line segments, then the
minimum distance between the segments is zero. Let
t = ((x3 - x1)*(y4 - y3) - (y3 - y1)*(x4 - x3)) / ((x2 - x1)*(y4 -
y3) - (y2 - y1)*(x4 - x3))
u = ((x3 - x1)*(y2 - y1) - (y3 - y1)*(x2 - x1)) / ((x2 - x1)*(y4 -
y3) - (y2 - y1)*(x4 - x3))
Then the point of intersection lies on both segments if and only if 0
<= t <= 1 and 0 <= u <= 1. The point of intersection is at (x,y), where
x = x1 + t*(x2 - x1) = x3 + u*(x4 - x3)
y = y1 + t*(y2 - y1) = y3 + u*(y4 - y3)
If the denominator in the expressions for t and u is zero then the
lines are parallel (see later).
If the point of intersection lies outside one or both line segments,
then the shortest distance between the two segments is either a line
between two endpoints or a perpendicular line from an endpoint on one
segment to the other segment, where the foot of the perpendicular lies
on the latter segment.
I can't immediately think of a general way to find the shortest of
these that's any easier than calculating them all and comparing (apart
from the unmathematical method of drawing the lines and seeing if it's
"obvious"). The distances between endpoints are easy. For example, the
distance between (x1,y1) and (x3,y3) is sqrt((x3 - x1)^2 + (y3 -
y1)^2), and similarly for the other pairs of endpoints.
To deal with the second case, let (p,q) be the endpoint from which the
perpendicular is dropped, and let the target line segment be (x1,y1) -
(x2,y2). Let
t = ((p - x1)*(x2 - x1) + (q - y1)*(y2 - y1)) / ((x2 - x1)^2 + (y2 -
y1)^2)
The foot of the perpendicular lies on the target line segment if and
only if 0 <= t <= 1. If it doesn't then this is not a candidate
solution. The foot of the perpendicular lies at (x,y) where
x = x1 + t * (x2 - x1)
y = y1 + t * (y2 - y1)
If the line segments are parallel then there is either a unique
endpoint-to-endpoint shortest distance, or an infinite number of lines
of shortest distance. In the latter case the above method will find
two, three, or four of them (perpendicular lines from the endpoints of
one segment to the other segment).
.
- Follow-Ups:
- Re: Distance between segments
- From: matt271829-news
- Re: Distance between segments
- References:
- Distance between segments
- From: zaknospam@xxxxxxxxx
- Distance between segments
- Prev by Date: Re: Renormalization of Equality
- Next by Date: Re: Distance between segments
- Previous by thread: Distance between segments
- Next by thread: Re: Distance between segments
- Index(es):
Relevant Pages
|