题解 | 两直线交点

两直线交点

https://www.nowcoder.com/practice/b14130882e704fd6aa57f8762ae17bac

class Point:
    def __init__(self, x=0.0, y=0.0):
        self.x = x
        self.y = y


class Line:
    def __init__(self, point_a=None, point_b=None):
        self.point_A = point_a if point_a is not None else Point()
        self.point_B = point_b if point_b is not None else Point()


def find_meeting_point(line_A, line_B):
    # TODO: 在这里输入你的代码,求直线 line_A 与 line_B 的交点
    x1,x2,x3,x4,y1,y2,y3,y4=line_A.point_A.x,line_A.point_B.x,line_B.point_A.x,line_B.point_B.x,line_A.point_A.y,line_A.point_B.y,line_B.point_A.y,line_B.point_B.y
    if x1==x2 and x3!=x4:
        k2=(y3-y4)/(x3-x4)
        b2=y3-k2*x3
        y0=k2*x1+b2
        return Point(x1,y0)
    elif x1!=x2 and x3==x4:
        k1=(y1-y2)/(x1-x2)
        b1=y2-k1*x2
        y0=k1*x3+b1
        return Point(x3,y0)
    elif x1==x2 and x3==x4:
        return Point(-1,-1)
    else:     
        k1=(y1-y2)/(x1-x2)
        b1=y1-k1*x1
        k2=(y3-y4)/(x3-x4)
        b2=y3-k2*x3
        if k1!=k2 : 
            x0=(b2-b1)/(k1-k2)
            y0=k1*x0+b1
            return Point(x0,y0)
        else:
            return Point(-1, -1)


def main():
    data = list(map(float, input().split()))
    data.extend(list(map(float, input().split())))
    A = Point(data[0], data[1])
    B = Point(data[2], data[3])
    C = Point(data[4], data[5])
    D = Point(data[6], data[7])
    AB = Line(A, B)
    CD = Line(C, D)
    ans = find_meeting_point(AB, CD)
    print(f"{ans.x} {ans.y}")


if __name__ == "__main__":
    main()

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务