Perpendicular on a line from a given point

前端 未结 14 1540
名媛妹妹
名媛妹妹 2020-11-29 18:34

How can I draw a perpendicular on a line segment from a given point? My line segment is defined as (x1, y1), (x2, y2), If I draw a perpendicular from a point (x3,y3) and it

相关标签:
14条回答
  • 2020-11-29 19:06

    I agree with peter.murray.rust, vectors make the solution clearer:

    // first convert line to normalized unit vector
    double dx = x2 - x1;
    double dy = y2 - y1;
    double mag = sqrt(dx*dx + dy*dy);
    dx /= mag;
    dy /= mag;
    
    // translate the point and get the dot product
    double lambda = (dx * (x3 - x1)) + (dy * (y3 - y1));
    x4 = (dx * lambda) + x1;
    y4 = (dy * lambda) + y1;
    
    0 讨论(0)
  • 2020-11-29 19:06

    Find out the slopes for both the lines, say slopes are m1 and m2 then m1*m2=-1 is the condition for perpendicularity.

    0 讨论(0)
  • 2020-11-29 19:08

    You know both the point and the slope, so the equation for the new line is:

    y-y3=m*(x-x3)
    

    Since the line is perpendicular, the slope is the negative reciprocal. You now have two equations and can solve for their intersection.

    y-y3=-(1/m)*(x-x3)
    y-y1=m*(x-x1)
    
    0 讨论(0)
  • 2020-11-29 19:08

    Matlab function code for the following problem

    function Pr=getSpPoint(Line,Point)
    % getSpPoint(): find Perpendicular on a line segment from a given point
    x1=Line(1,1);
    y1=Line(1,2);
    x2=Line(2,1);
    y2=Line(2,1);
    x3=Point(1,1);
    y3=Point(1,2);
    
    px = x2-x1;
    py = y2-y1;
    dAB = px*px + py*py;
    
    u = ((x3 - x1) * px + (y3 - y1) * py) / dAB;
    x = x1 + u * px;
    y = y1 + u * py;
    
    Pr=[x,y];
    
    end
    
    0 讨论(0)
  • 2020-11-29 19:08

    This is mostly a duplicate of Arnkrishn's answer. I just wanted to complete his section with a complete Mathematica code snippet:

    m = (y2 - y1)/(x2 - x1)
    eqn1 = y - y3 == -(1/m)*(x - x3)
    eqn2 = y - y1 == m*(x - x1)
    Solve[eqn1 && eqn2, {x, y}]
    
    0 讨论(0)
  • 2020-11-29 19:10

    First, calculate the linear function determined by the points (x1,y2),(x2,y2).

    We get:

    y1 = mx+b1 where m and b1 are constants.
    

    This step is easy to calculate by the formula of linear function between two points.


    Then, calculate the linear function y that goes through (x3,y3).

    The function slope is -m, where m is the slope of y1.


    Then calculate the const b2 by the coordinates of the point (x3,y3).

    We get y2 = -mx+b2 where m and b2 are constants.


    The last thing to do is to find the intersection of y1, y2. You can find x by solving the equation: -mx+b2 = mx+b1, then place x in one of the equations to find y.

    0 讨论(0)
提交回复
热议问题