Perpendicular on a line segment from a given point

后端 未结 9 1545
小鲜肉
小鲜肉 2020-12-02 11:52

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 ca

9条回答
  •  一生所求
    2020-12-02 12:00

    Here is a python implementation based on Corey Ogburn's answer from this thread.
    It projects the point q onto the line segment defined by p1 and p2 resulting in the point r.
    It will return null if r falls outside of line segment:

    def is_point_on_line(p1, p2, q):
    
        if (p1[0] == p2[0]) and (p1[1] == p2[1]):
            p1[0] -= 0.00001
    
        U = ((q[0] - p1[0]) * (p2[0] - p1[0])) + ((q[1] - p1[1]) * (p2[1] - p1[1]))
        Udenom = math.pow(p2[0] - p1[0], 2) + math.pow(p2[1] - p1[1], 2)
        U /= Udenom
    
        r = [0, 0]
        r[0] = p1[0] + (U * (p2[0] - p1[0]))
        r[1] = p1[1] + (U * (p2[1] - p1[1]))
    
        minx = min(p1[0], p2[0])
        maxx = max(p1[0], p2[0])
        miny = min(p1[1], p2[1])
        maxy = max(p1[1], p2[1])
    
        is_valid = (minx <= r[0] <= maxx) and (miny <= r[1] <= maxy)
    
        if is_valid:
            return r
        else:
            return None
    

提交回复
热议问题