题解 | 两直线交点

两直线交点

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

#include <bits/stdc++.h>
using namespace std;

struct point {
    double x, y;
    point(double A, double B) {
        x = A, y = B;
    }
    point() = default;
};

struct line {
    point point_A, point_B;
    line(point A, point B) {
        point_A = A, point_B = B;
    }
    line() = default;
};

point findMeetingPoint(line line_A, line line_B) {

    double px, py; // 所求坐标
    double x1 = line_A.point_A.x, y1 = line_A.point_A.y;
    double x2 = line_A.point_B.x, y2 = line_A.point_B.y; // A方程的两个点

    double x3 = line_B.point_A.x, y3 = line_B.point_A.y;
    double x4 = line_B.point_B.x, y4 = line_B.point_B.y; // B方程的两个点

    // 求出AB两点的直线一般式方程
    double A1 = y2 - y1;
    double B1 = x1 - x2;
    double C1 = x2 * y1 - x1 * y2;

    // 求出CD两点的直线一般式方程
    double A2 = y4 - y3;
    double B2 = x3 - x4;
    double C2 = x4 * y3 - x3 * y4;

    // 判断是否平行
    double k1 = (A1 / B1) * -1.0;
    double k2 = (A2 / B2) * -1.0;

    if (k1 == k2) {
        return point(-1, -1);
    }else {
        px = (B1 * C2 - B2 * C1) / (A1 * B2 - A2 * B1);
        py = (C1 * A2 - C2 * A1) / (A1 * B2 - A2 * B1);
        return point(px, py);
    }
}

int main() {
    point A, B, C, D;
    cin >> A.x >> A.y >> B.x >> B.y >> C.x >> C.y >> D.x >> D.y;
    line AB = line(A, B);
    line CD = line(C, D);
    point ans = findMeetingPoint(AB, CD);
    cout << fixed << setprecision(12) << ans.x << " " << ans.y;
    return 0;
}

全部评论

相关推荐

04-03 22:41
兰州大学 C++
老六f:有时候是HR发错了,我之前投的百度的后端开发,他给我发的算法工程师,但是确实面的就是百度开发
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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