0010 : Circumscribed Circle of a Triangle
解説
三角形の外接円の中心と半径を求める。
中心の座標(xp,yp)、半径rに対して、
(x1-xp)^2+(y1-yp)^2 = (x2-xp)^2+(y2-yp)^2 = (x3-xp)^2+(y3-yp)^2 = r^2
が成り立つので、これをxpとypについて解けばいい。すごく長い式になるけど。
プログラム
C
C++
|
+
|
... |
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int main() {
int n;
double x1,y1,x2,y2,x3,y3;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
double x = ((y1 - y3)*(y1*y1 - y2*y2 + x1*x1 - x2*x2) - (y1 - y2)*(y1*y1 - y3*y3 + x1*x1 - x3*x3)) /
(2*(y1 - y3)*(x1 - x2) - 2*(y1-y2)*(x1-x3));
double y = ((x1 - x3)*(x1*x1 - x2*x2 + y1*y1 - y2*y2) - (x1 - x2)*(x1*x1 - x3*x3 + y1*y1 - y3*y3)) /
(2*(x1 - x3)*(y1 - y2) - 2*(x1-x2)*(y1-y3));
double r = sqrt((x1-x)*(x1-x) + (y1-y)*(y1-y));
printf("%.3f %.3f %.3f\n", x, y, r);
}
return 0;
}
|
Java
最終更新:2012年12月15日 15:03