# Optimal way to find point D that lays at the perpendicular line between point A and line BC

I am trying to write a script in C# to find the position of point D in 2D space in a specific scenario.

I know the (X,Y) position of point A, which never happens to be on the line that contains the line-segment BC. I also know that point D lies on the perpendicular line that passes through A and crosses BC at a point that we can call P. Also, I know the distance that D is from P. Se the image below: Can anyone shed some line on which is the most optimal way of achieving that?

• Does "never at the line BC" mean "never on the line segment BC" or "never on the line through both points B ad C"? What does "point D lays at the ..." mean? Your question is currently completely incomprehensible, so please clarify in correct English mathematical terms so as to be well defined. – Pieter Geerkens Oct 10 '15 at 5:31
• Thanks for your feedback. I really meant " on the line" , not only on the line segment. I edited the question to clarify. Hope now it looks better in "English mathematical terms". Let me know. – Louis15 Oct 10 '15 at 15:02
• Can you explain more on what is bc , is it a forward vector of some gameobject . I am asking this because the solution can become more simpler , without any mathematical calculations. – Hash Buoy Oct 22 '15 at 20:07
• @HashBuoy thanks for the comment. Here, isactually neither a vector nor a GameObject. It is just a line segment in 2D space (although we could make it a vector by either B-C or C-B). What are your thoughts? – Louis15 Oct 24 '15 at 2:11
• Then it might not help , anyways i had answered a similar problem . Don't know if this would help you , check this out - gamedev.stackexchange.com/a/108493/40457 – Hash Buoy Oct 25 '15 at 18:58

Finding point P is easy if you use the dot-product. In pseudo-code:

vec2  BC = C - B
vec2  BA = A - B
vec2  nBC = normalize( BC )
float dBP = dot( BA, nBC )
vec2  P = B + dBP * nBC

vec2  D = P + dist * normalize( A - P )


First, you need to find point P, it is the closest point on line BC. Knowing where P is, you can construct line AP. Going from that, finding point D on line AP is trivial (P + dirAP * dist).

• Thank you very much for the link. Today's morning I already figured out the general process itself, but was struggling to implement it correctly. I will try the second answer from that link, since it seems like a quite efficient solution. – Louis15 Oct 10 '15 at 15:18
• @Louis15 yep, it looks good. If you were interested in how it works there is an explanation on physics SE - it is actually doing projection AP onto BC. – wondra Oct 10 '15 at 15:30