Reflect 2D vector from a line
Having a vector a, and a line (or other vector), there is a direct method to reflect the vector a from the line axis ?
I know that can make this by movin line to origin, rotating line to align it to an coord axis Y and reflecting by Y, and later do the steps backwards.
rewrite your vector a as a sum of two vectors a = ap + ao.
ap is parallel to the 2nd vector b (line) : ap = x*b. You´ll most probably (=best) have to use the dot product a*b to find x.
ao is orthogonal to b. Best obtained by ao = a - ap.
For the reflected vector a'': a'' = ap - ao.
In words: The parallel part of a remains unchanged (that´s what´ll happen if you "reflect" your line on itself, no?) while the orthogonal part changes it´s direction.
Sadly, you didn´t explicitely say how you´d "reflect" ("to mirror" might fit in better) your vector on the Y-Axis but above is most probably what you meant.
btw.: If you want to "reflect" a vector on a line that doesn´t pass through the origin, then I don´t even know what you want to do (mirroring a point, perhaps?).
ap is parallel to the 2nd vector b (line) : ap = x*b. You´ll most probably (=best) have to use the dot product a*b to find x.
ao is orthogonal to b. Best obtained by ao = a - ap.
For the reflected vector a'': a'' = ap - ao.
In words: The parallel part of a remains unchanged (that´s what´ll happen if you "reflect" your line on itself, no?) while the orthogonal part changes it´s direction.
Sadly, you didn´t explicitely say how you´d "reflect" ("to mirror" might fit in better) your vector on the Y-Axis but above is most probably what you meant.
btw.: If you want to "reflect" a vector on a line that doesn´t pass through the origin, then I don´t even know what you want to do (mirroring a point, perhaps?).
I thing I may have missunderstood your question:
That may or may not help depending on what you are looking for...
Vector2D Reflection(Vector2D vec, Vector2D lp1, Vector2D lp2){ Vector2D normal; normal.x = lp2.x-lp1.x; normal.y = lp2.y-lp1.y; float temp = normal.x; normal.x = -normal.y; normal.y = temp; normal.Normalize(); float dot2 = 2 * vec.Dot(normal); vec.x-=dot2*normal.x; vec.y-=dot2*normal.y; return vec;}
That may or may not help depending on what you are looking for...
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement