0
\$\begingroup\$

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:

enter image description here

Can anyone shed some line on which is the most optimal way of achieving that?

\$\endgroup\$
5
  • 1
    \$\begingroup\$ 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. \$\endgroup\$ Commented Oct 10, 2015 at 5:31
  • \$\begingroup\$ 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. \$\endgroup\$
    – Louis15
    Commented Oct 10, 2015 at 15:02
  • \$\begingroup\$ 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. \$\endgroup\$
    – Hash Buoy
    Commented Oct 22, 2015 at 20:07
  • \$\begingroup\$ @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? \$\endgroup\$
    – Louis15
    Commented Oct 24, 2015 at 2:11
  • \$\begingroup\$ 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 \$\endgroup\$
    – Hash Buoy
    Commented Oct 25, 2015 at 18:58

2 Answers 2

2
\$\begingroup\$

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 )
\$\endgroup\$
1
\$\begingroup\$

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).

\$\endgroup\$
2
  • \$\begingroup\$ 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. \$\endgroup\$
    – Louis15
    Commented Oct 10, 2015 at 15:18
  • \$\begingroup\$ @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. \$\endgroup\$
    – wondra
    Commented Oct 10, 2015 at 15:30

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .