题解 | 两直线交点
两直线交点
https://www.nowcoder.com/practice/b14130882e704fd6aa57f8762ae17bac
import java.util.*;
public class Main {
static class Point {
public double x, y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public Point() {
this(0.0, 0.0);
}
}
static class Line {
public Point point_A, point_B;
public Line(Point a, Point b) {
point_A = a;
point_B = b;
}
public Line() {
point_A = new Point();
point_B = new Point();
}
}
public static Point findMeetingPoint(Line lineA, Line lineB) {
// TODO: 求直线 lineA 与 lineB 的交点
double ax = lineA.point_A.x;
double ay = lineA.point_A.y;
double bx = lineA.point_B.x;
double by = lineA.point_B.y;
double cx = lineB.point_A.x;
double cy = lineB.point_A.y;
double dx = lineB.point_B.x;
double dy = lineB.point_B.y;
Point jiaodian = new Point();
if(ax != bx && cx != dx){
double k1 = (ay - by) / (ax - bx);
double b1 = by - k1*bx;
double k2 = (cy - dy) / (cx - dx);
double b2 = dy - k2*dx;
if(k1 == k2){
jiaodian.x = -1;
jiaodian.y = -1;
return jiaodian;
}
jiaodian.x = (b2 - b1) / (k1 - k2);
jiaodian.y = k1 * jiaodian.x + b1;
}else if(ax != bx && cx == dx){
double k1 = (ay - by) / (ax - bx);
double b1 = by - k1*bx;
jiaodian.x = cx;
jiaodian.y = k1 * jiaodian.x + b1;
}else if(ax == bx && cx != dx){
double k1 = (cy - dy) / (cx - dx);
double b1 = dy - k1*dx;
jiaodian.x = ax;
jiaodian.y = k1 * jiaodian.x + b1;
}else{
jiaodian.x = -1;
jiaodian.y = -1;
}
return jiaodian;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Point A = new Point();
A.x = scanner.nextDouble();
A.y = scanner.nextDouble();
Point B = new Point();
B.x = scanner.nextDouble();
B.y = scanner.nextDouble();
Point C = new Point();
C.x = scanner.nextDouble();
C.y = scanner.nextDouble();
Point D = new Point();
D.x = scanner.nextDouble();
D.y = scanner.nextDouble();
Line AB = new Line(A, B);
Line CD = new Line(C, D);
Point ans = findMeetingPoint(AB, CD);
System.out.println(ans.x + " " + ans.y);
scanner.close();
}
}

查看2道真题和解析