zoukankan      html  css  js  c++  java
  • hdu6206 Apple java,三点找外接圆

    hdu6206  

    题意:给出 4 个点,问第4个点是否在前三个点形成的外接圆外。

    tags: 会有精度问题,上 java 。。

    1】公式

    已知三点坐标,求外接圆圆心坐标与半径。

    //已知三点坐标,求外接圆圆心坐标与半径。
    x=((y2-y1)*(y3*y3-y1*y1+x3*x3-x1*x1)-(y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1))/(2.0*((x3-x1)*(y2-y1)-(x2-x1)*(y3-y1)));
    y=((x2-x1)*(x3*x3-x1*x1+y3*y3-y1*y1)-(x3-x1)*(x2*x2-x1*x1+y2*y2-y1*y1))/(2.0*((y3-y1)*(x2-x1)-(y2-y1)*(x3-x1)));
    r^2=(x1-a)*(x1-a)+(y1-b)*(y1-b);
    //package project1;
    
    import java.util.*;
    import java.math.*;
    import java.util.Scanner;
    
    public class Main { 
        //Test2 {
        public static void main(String[] argv) throws Exception
        {
            Scanner sc = new Scanner(System.in);
            MathContext mc = new MathContext(7, RoundingMode.HALF_DOWN);
            
            int T = sc.nextInt();
            for(int cas=1; cas<=T; ++cas)
            {
                BigDecimal x1=sc.nextBigDecimal(), y1=sc.nextBigDecimal(), x2=sc.nextBigDecimal(), y2=sc.nextBigDecimal();
                BigDecimal x3=sc.nextBigDecimal(), y3=sc.nextBigDecimal(), x4=sc.nextBigDecimal(), y4=sc.nextBigDecimal();
                BigDecimal x, y, r;
                
                BigDecimal a1=y2.subtract(y1),  a2=y3.multiply(y3), a3=y1.multiply(y1), a4=x3.multiply(x3), a5=x1.multiply(x1);
                BigDecimal a6 = (y2.subtract(y1)).multiply(y3.pow(2).subtract(y1.pow(2)).add(x3.pow(2)).subtract(x1.pow(2)));
                BigDecimal a7 = (y3.subtract(y1)).multiply(y2.pow(2).subtract(y1.pow(2)).add(x2.pow(2)).subtract((x1.pow(2))));
                a1=BigDecimal.valueOf(2);
                a2=x3.subtract(x1);
                a3=y2.subtract(y1);
                a4=x2.subtract(x1);
                a5=y3.subtract(y1);
                BigDecimal a8 = a1.multiply((a2).multiply(a3).subtract(a4.multiply(a5)));
                x = a6.subtract(a7).divide(a8);
    
                a6 = (x2.subtract(x1)).multiply(x3.pow(2).subtract(x1.pow(2)).add(y3.pow(2)).subtract(y1.pow(2)));
                a7 = (x3.subtract(x1)).multiply(x2.pow(2).subtract(x1.pow(2)).add(y2.pow(2)).subtract((y1.pow(2))));
                a1=BigDecimal.valueOf(2);
                a2=y3.subtract(y1);
                a3=x2.subtract(x1);
                a4=y2.subtract(y1);
                a5=x3.subtract(x1);
                a8 = a1.multiply(a2.multiply(a3).subtract(a4.multiply(a5)));
                y = a6.subtract(a7).divide(a8);
                
                a1 = (x1.subtract(x).pow(2));
                a2 = (y1.subtract(y).pow(2));
                r = a1.add(a2);
                
                a1 = (x.subtract(x4).pow(2));
                a2 = (y.subtract(y4).pow(2));
                BigDecimal dis = a1.add(a2);
                
                //System.out.println(x+"  "+y+"  "+r+"  "+dis+"-----");
                
                if(dis.compareTo(r) > 0) System.out.println("Accepted");
                else System.out.println("Rejected");
            }
        }
    }
    
    /*
    已知三点坐标,求外接圆圆心坐标与半径。
    x=((y2-y1)*(y3*y3-y1*y1+x3*x3-x1*x1)-(y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1))/(2.0*((x3-x1)*(y2-y1)-(x2-x1)*(y3-y1)));
    y=((x2-x1)*(x3*x3-x1*x1+y3*y3-y1*y1)-(x3-x1)*(x2*x2-x1*x1+y2*y2-y1*y1))/(2.0*((y3-y1)*(x2-x1)-(y2-y1)*(x3-x1)));
    r^2=(x1-a)*(x1-a)+(y1-b)*(y1-b);
    
    */
    View Code

    2】函数

    //三点找一圆
    Circle findCircle2(P p1, P p2, P p3)
    {
        double A1, A2, B1, B2, C1, C2, temp;
        A1 = p1.x - p2.x;
        B1 = p1.y - p2.y;
        C1 = (p1.x*p1.x - p2.x*p2.x + p1.y*p1.y - p2.y*p2.y) / 2;
        A2 = p3.x - p2.x;
        B2 = p3.y - p2.y;
        C2 = (p3.x*p3.x - p2.x*p2.x + p3.y*p3.y - p2.y*p2.y) / 2;
        temp = A1*B2 - A2*B1;
        Circle CD;
        CD.center.x = (C1*B2 - C2*B1) / temp;
        CD.center.y = (A1*C2 - A2*C1) / temp;
        CD.radius = sqrtf((CD.center.x - p1.x)*(CD.center.x - p1.x) + (CD.center.y - p1.y)*(CD.center.y - p1.y));
        return CD;
    }
  • 相关阅读:
    【重要】关于WEBSERVICE的远程访问问题
    【系统】windows2003 至少有一个服务或驱动程序无法加载或错误
    【总结】IE6、IE7、IE8、Firefox、Opera CSS hack区分
    【总结】DIV+CSS有可能遇到的问题
    【精华】Asp优化之缓存技术
    【总结】ASP字符串转换函数用法
    【重要】条形码原理39码和EAN13码
    【精华】教你如何制作无人值守安装Win XP系统盘
    【原创】解决IE8下minheight值使bottom:0px失效的方法
    【手机】Windows Mobile手机软件安装卸载方法
  • 原文地址:https://www.cnblogs.com/sbfhy/p/7554419.html
Copyright © 2011-2022 走看看