简略题意:给出4个点的坐标,问第4个点是不是在前3个点组成的三角形的外接圆外。
先求出外接圆,然后判断第4个点和圆心的距离即可,唯一的问题是精度不够,需要上java。
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
/**
*
* @author meopass
*/
public class Main {
static Scanner cin = new Scanner(System.in);
static PrintWriter cout = new PrintWriter(System.out, true);
// init();
static BigDecimal p2(BigDecimal x1) {
return x1.multiply(x1);
}
static BigDecimal dis2(BigDecimal x1, BigDecimal y1,BigDecimal x2,BigDecimal y2) {
BigDecimal tmp = BigDecimal.valueOf(0);
tmp = tmp.add(x1.subtract(x2).multiply(x1.subtract(x2)));
tmp = tmp.add(y1.subtract(y2).multiply(y1.subtract(y2)));
return tmp;
}
public static void main(String[] args)
{
int t;
t = cin.nextInt();
for(int i = 0; i < t; i++) {
BigDecimal x1, y1, x2, y2, x3, y3, x4, y4;
x1 = cin.nextBigDecimal();
y1 = cin.nextBigDecimal();
x2 = cin.nextBigDecimal();
y2 = cin.nextBigDecimal();
x3 = cin.nextBigDecimal();
y3 = cin.nextBigDecimal();
x4 = cin.nextBigDecimal();
y4 = cin.nextBigDecimal();
BigDecimal bx = x2.subtract(x1);
BigDecimal by = y2.subtract(y1);
BigDecimal cx = x3.subtract(x1);
BigDecimal cy = y3.subtract(y1);
BigDecimal d = BigDecimal.valueOf(2).multiply(bx.multiply(cy).subtract(by.multiply(cx)));
BigDecimal x = ((cy.multiply(p2(bx).add(p2(by)))).subtract(by.multiply(p2(cx).add(p2(cy))))).divide(d).add(x1);
BigDecimal y = ((bx.multiply(p2(cx).add(p2(cy)))).subtract(cx.multiply(p2(bx).add(p2(by))))).divide(d).add(y1);
BigDecimal r = dis2(x1, y1, x, y);
BigDecimal rr = dis2(x, y, x4, y4);
if(r.compareTo(rr)>=0) cout.println("Rejected");
else cout.println("Accepted");
}
}
}