Search code examples
math3dgeometry

Perpendicular on a line segment from a given point


I want to calculate a point on a given line that is perpendicular from a given point.

I have a line segment AB and have a point C outside line segment. I want to calculate a point D on AB such that CD is perpendicular to AB.

Find point D

I have to find point D.

It quite similar to this, but I want to consider to Z coordinate also as it does not show up correctly in 3D space.


Solution

  • Proof: Point D is on a line CD perpendicular to AB, and of course D belongs to AB. Write down the Dot product of the two vectors CD.AB = 0, and express the fact D belongs to AB as D=A+t(B-A).

    We end up with 3 equations:

     Dx=Ax+t(Bx-Ax)
     Dy=Ay+t(By-Ay)
    (Dx-Cx)(Bx-Ax)+(Dy-Cy)(By-Ay)=0
    

    Subtitute the first two equations in the third one gives:

    (Ax+t(Bx-Ax)-Cx)(Bx-Ax)+(Ay+t(By-Ay)-Cy)(By-Ay)=0
    

    Distributing to solve for t gives:

    (Ax-Cx)(Bx-Ax)+t(Bx-Ax)(Bx-Ax)+(Ay-Cy)(By-Ay)+t(By-Ay)(By-Ay)=0
    

    which gives:

    t= -[(Ax-Cx)(Bx-Ax)+(Ay-Cy)(By-Ay)]/[(Bx-Ax)^2+(By-Ay)^2]
    

    getting rid of the negative signs:

    t=[(Cx-Ax)(Bx-Ax)+(Cy-Ay)(By-Ay)]/[(Bx-Ax)^2+(By-Ay)^2]
    

    Once you have t, you can figure out the coordinates for D from the first two equations.

     Dx=Ax+t(Bx-Ax)
     Dy=Ay+t(By-Ay)