2016年2月9日 星期二

c116: 00438 - The Circumference of the Circle

內容 :
要計算一個圓的圓週長似乎是相當簡單的事,如果你知道直徑的話。但是如果你不知道直徑呢?
給你不共線的三個點的座標,你的任務是算出通過這三個點的唯一圓的週長是多少。
輸入說明 : 
每組測試資料一列,含有6個實數x1,y1,x2,y2,x3,y3,分別代表三個點的座標(此三個點不共線)。通過這三個點的唯一圓的直徑不會超過1百萬。
輸出說明 : 
對每一組測試資料,輸出通過這三個點的唯一圓的週長是多少,請輸出到小數點後2位。
圓週率PI的值大約是 3.141592653589793
範例輸入 : help
0.0 -0.5 0.5 0.0 0.0 0.5
0.0 0.0 0.0 1.0 1.0 1.0
5.0 5.0 5.0 7.0 4.0 6.0
0.0 0.0 -1.0 7.0 7.0 7.0
50.0 50.0 50.0 70.0 40.0 60.0
0.0 0.0 10.0 0.0 20.0 1.0
0.0 -500000.0 500000.0 0.0 0.0 500000.0
範例輸出:
3.14
4.44
6.28
31.42
62.83
632.24
3141592.65
提示 : 
* Luck 貓翻譯
標籤:
出處: 
UVa438 (管理:)

import java.util.Scanner;

public class UVAc116 {                        //數學解, 外切圓R = a*b*c/4S, S為三角面積, 用海龍公式S=sqrt(s(s-a)(s-b)(s-c))

public static void main(String[] args) {
final double PI=3.141592653589793;
double x1,y1,x2,y2,x3,y3;
double s,a,b,c,r;
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
x1=sc.nextDouble();
y1=sc.nextDouble();
x2=sc.nextDouble();
y2=sc.nextDouble();
x3=sc.nextDouble();
y3=sc.nextDouble();
a=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
b=Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
c=Math.sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
s=(a+b+c)/2;
r=a*b*c/(4*Math.sqrt(s*(s-a)*(s-b)*(s-c)));
System.out.printf("%.2f\n",2*r*PI);
}

}

}

沒有留言:

張貼留言