Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to reflect a line over another line

For a collision algorithm I am developing, I need to find out how to reflect a line over another.

Line 1:

y=ax+b 

Line 2:

y=cx+d 

Line 3:

(a result of reflecting line 1 over line 2) y=ex+f

Is there any algebraic way to determine e and f in terms of a, b, c, and d?

like image 545
A Parikh Avatar asked Jun 30 '13 23:06

A Parikh


People also ask

How do you reflect one line over another?

The equation for your reflected line can be constructed using the point-slope form, y=m(x−xQ)+yQ. The point (xQ,yQ) is easily obtained as the intersection of your "mirror" line (the blue one) and the line to be reflected (the solid red one).

Can you reflect across any line?

The line of reflection, or line of symmetry, can be any line you choose, but the x and y axis are some common lines of reflection. Notation requation is used to denote the line of symmetry. Replace "equation" with any line--y=x, y=0, x=1, etc.

What does it mean to reflect over a line?

A reflection over line is a transformation in which each point of the original figure (the pre-image) has an image that is the same distance from the reflection line as the original point, but is on the opposite side of the line. In a reflection, the image is the same size and shape as the pre-image.


1 Answers

I have run over this exact same problem before. Stay with me here...

This problem involves two parts:

1. Find the point at which they intersect

to find where two lines intersect, we use the two equations of the lines:

y = M1x + B1
y = M2x + B2

Using substitution:

M1x + B1 = M2x + B2
M1x - M2x = B2 - B1
x(M1 - M2) = B2 - B1
x = (B2 - B1) / (M1 - M2)

To find the y value, just plug it in:

y = M1x + B1

2. Find the slope of the line from the other two slopes.

The second is far trickier. Using trigonometry, it is not impossible.

Let L1 be the "base line." (With a slope of M1)

Let L2 be the line that is to be reflected over the "base line." (With a slope of M2)

Let L3 be our resulting line. (With a slope of M3)

The equation I used is as follows:

double M3 = ((2 * M1) + (M2 * pow(M1, 2)) - M2) / (2 * M1 * M2 - pow(M1, 2) + 1);

Straight from my C code. It is important to note that both slopes should be defined. You can use L'Hopital's rule to get an equation when one of the slopes is approaching infinity.

ONWARD WITH THE EXPLANATION!

Line Diagram

Here is a crude drawing of three lines. L2 is reflected over L1, resulting in L3. Drawing is not exact. The angle between L1 and L2, as well as L2 and L3, is labelled as R.\ Here are the facts:

M1 = tan(A1) 
M2 = tan(A2) 
M3 = tan(A3) 

This comes from the definition of tangent.

A3 = R + A1

This is a little trickier to see, but if you draw a horizontal line at the point of intersection it becomes obvious.

Thus, our goal is to find tan(A3). To accomplish this, we need to find R. As we can see, R can be found in a triangle with A2 and the supplement of A1 as the other angles. Thus, we know:

R + (180 - A1) + A2 = 180
R - A1 + A2 = 0
R = A1 - A2

Let's take the tangent of both sides:

tan(R) = tan(A1 - A2)

From trigonometry, we know:

tan(R) =  (tan(A1) - tan(A2)) / (1 + tan(A1)tan(A2))
R = arctan((tan(A1) - tan(A2) / (1 + tan(A1)tan(A2))

Arctan being inverse tangent. From our earlier formula, A3 = R + A1, we get:

A3 = arctan((tan(A1) - tan(A2) / (1 + tan(A1)tan(A2)) + A1
A3 = arctan((M1 - M2) / (1 + M1*M2)) + A1

But we don't want A3. We want tan(A3). So again, we take the tangent of both sides.

tan(A3) = M3 = tan(arctan((M1 - M2) / (1 + M1*M2)) + A1)
M3 = tan(arctan((M1 - M2) / (1 + M1*M2))) + tan(A1) / (1 - tan(arctan((M1 - M2) / (1 + M1*M2))) * tan(A1))

Unfortunately, that's disgustingly hideous. Replacing tangents with slopes and simplifying, we get

M3 = ((M1 - M2) / (1 + M1*M2)) + M1 / (1 - ((M1 - M2)/(1 + M1*M2)) * M1)
M3 = (M1 - M2 + M1*(1 + M1*M2)) / (1 + M1*M2 - M1*M1 + M1*M2)
M3 = (M1^2 * M2 + 2*M1 - M2) / (1 + 2*M1*M2 - M1^2)

Which is the exact same as the formula above. Sorry about all the ugly math. When M2 is completely vertical, you can use L'Hopital's rule to get

M3 = (M1^2 - 1) / 2*M1

If anyone is so inclined, check my math. But I'm tired right about now.

like image 106
BrainSteel Avatar answered Oct 06 '22 14:10

BrainSteel