public static Point LinePlaneIntersection( Point A, Point B, short Z )
{
if( A.Z == Z )
{
return A;
}
if( B.Z == Z )
{
return B;
}
if( A.Z < B.Z )
{
if( ( Z < A.Z ) || ( Z > B.Z ) )
{
return null;
}
}
else
{
if( ( Z < B.Z ) || ( Z > A.Z ) )
{
return null;
}
}
// intersection test should go here
return null;
}
2D line-segment - line intersection?
This is probably a simple problem, but my math skills aren't that sharp.
What I have is a line segment from (x1,z1) to (x2,z2) and a value z. z represents a horizontal, one-dimensional line.
I've gotten to the point where I can tell if z is between the segment's points. Now I'm stuck though, I have no idea how to get the intersection point.
Point consists of two variables: X and Z
Anyone have any ideas? I thought about getting the slope, but what do I do after that?
Try:
float dx = x2 - x1;float dz = z2 - z1;if (std::fabs(dz) > 0.0f) { // Or an epsilon instead of 0.0 float t = (z1 - z) / dz; float newX = x1 + t * dx; float newZ = z1 + t * dz;}
Typed into post, so may or may not be correct.
You calculate the slope by
To calculate the b-value, you put it an arbitrary point you know are on the line, with the m you know, and then solve for b.
You now know the equation of the line. Now you wonder for which (x_ans, y_ans) the line intersects with a horizontal line y = z.
We express this as an equation and solve for x
So now we know the x for intersection, so we can easily get the y from the line equation:
Edit: Oh, stupid me, y_ans will of course always be equal to z, so you're done when you know x_ans.
m = (y2 - y1) / (x2 - x1)
To calculate the b-value, you put it an arbitrary point you know are on the line, with the m you know, and then solve for b.
y = m * x + b b = y1 - m * x1
You now know the equation of the line. Now you wonder for which (x_ans, y_ans) the line intersects with a horizontal line y = z.
We express this as an equation and solve for x
z = m * x_ans + b x_ans = (z - b) / m
So now we know the x for intersection, so we can easily get the y from the line equation:
y_ans = m * x_ans + b
Edit: Oh, stupid me, y_ans will of course always be equal to z, so you're done when you know x_ans.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement