描述
题解
计算几何 + 大浮点数……很恶心啊……用 java 写会容易些。
给定三个点,然后判断第四点是否在这三个点的外接圆内。
代码
import java.math.BigDecimal;
import java.util.Scanner;
class Util {
public static BigDecimal calR(Dot a, Dot b) {
return a.x.subtract(b.x).multiply(a.x.subtract(b.x)).add(a.y.subtract(b.y).multiply(a.y.subtract(b.y)));
}
}
class Dot {
public BigDecimal x, y;
public Dot() {
}
public Dot(BigDecimal x, BigDecimal y) {
this.x = x;
this.y = y;
}
}
public class Main {
private static Scanner sc;
public static void main(String[] args) {
sc = new Scanner(System.in);
BigDecimal two = new BigDecimal("2.00000");
Dot dot1 = new Dot();
Dot dot2 = new Dot();
Dot dot3 = new Dot();
Dot dot4 = new Dot();
int T = sc.nextInt();
for (int cnt = 1; cnt <= T; cnt++) {
dot1.x = sc.nextBigDecimal();
dot1.y = sc.nextBigDecimal();
dot2.x = sc.nextBigDecimal();
dot2.y = sc.nextBigDecimal();
dot3.x = sc.nextBigDecimal();
dot3.y = sc.nextBigDecimal();
dot4.x = sc.nextBigDecimal();
dot4.y = sc.nextBigDecimal();
BigDecimal a = dot3.x.subtract(dot2.x).multiply(two);
BigDecimal b = dot3.y.subtract(dot2.y).multiply(two);
BigDecimal c = dot3.x.multiply(dot3.x).subtract(dot2.x.multiply(dot2.x)).add(dot3.y.multiply(dot3.y))
.subtract(dot2.y.multiply(dot2.y));
BigDecimal e = dot2.x.subtract(dot1.x).multiply(two);
BigDecimal f = dot2.y.subtract(dot1.y).multiply(two);
BigDecimal g = dot2.x.multiply(dot2.x).subtract(dot1.x.multiply(dot1.x)).add(dot2.y.multiply(dot2.y))
.subtract(dot1.y.multiply(dot1.y));
BigDecimal X = g.multiply(b).subtract(c.multiply(f)).divide(e.multiply(b).subtract(a.multiply(f)));
BigDecimal Y = a.multiply(g).subtract(c.multiply(e)).divide(a.multiply(f).subtract(b.multiply(e)));
Dot cir = new Dot(X, Y);
BigDecimal r = Util.calR(cir, dot1);
BigDecimal dis = Util.calR(cir, dot4);
if (dis.compareTo(r) > 0) {
System.out.println("Accepted");
} else {
System.out.println("Rejected");
}
}
}
}