AOJ0010 - Circumscribed Circle of a Triangle

計算するだけなんですけど,色々と面倒臭かった.

AOJ0010

参考:kanetaiの二次記憶装置

各点から円の中心までの距離(つまり半径)が全て等しいことを考える.

各点を { A(x_1, y_1)} { B(x_2, y_2)} { C(x_3, y_3)} と置く.
また中心の座標を{ P(x_p, y_p)} と置く.

半径が等しいということは

{ | \vec{PA}| = | \vec{PB}| = | \vec{PC}|}

これらを連立方程式として解けば{ x_p}{ y_p}が求まる.

連立方程式は以下のようになる.

{
\begin{cases}
\; 2(x_1 - x_2)x_p + 2(y_1 - y_2)y_p = x_1^2 + y_1^2 - x_2^2 - y_2^2 \\
\; 2(x_1 - x_3)x_p + 2(y_1 - y_3)y_p = x_1^2 + y_1^2 - x_3^2 - y_3^2
\end{cases}}

行列を用いて,

\begin{pmatrix} 2(x_1 - x_2) & 2(y_1 - y_2) \\ 2(x_1 - x_3) & 2(y_1 - y_3) \\ \end{pmatrix}

逆行列

\begin{pmatrix} x_1^2 + y_1^2 - x_2^2 - y_2^2 \\ x_1^2 + y_1^2 - x_3^2 - y_3^2 \\ \end{pmatrix}

の積を求めればよい.

また,半径の長さは先程の { | \vec{PA}| = | \vec{PB}| = | \vec{PC}|} どれか一つに代入して求める.

コード

#define sq(x) ((x) * (x))

signed main()
{
  int n;
  scanf("%d", &n);

  while (n--){
    double x1, y1, x2, y2, x3, y3;
    scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3);

    double a = 2 * (x1 - x2), b = 2 * (y1 - y2),
           c = 2 * (x1 - x3), d = 2 * (y1 - y3);
    double e = sq(x1) + sq(y1) - sq(x2) - sq(y2),
           f = sq(x1) + sq(y1) - sq(x3) - sq(y3);

    double x = (1 / (a * d - b * c)) * (d * e - b * f),
           y = (1 / (a * d - b * c)) * (-c * e + a * f);

    double r = sqrt(sq(x - x1) + sq(y - y1));
    printf("%.3f %.3f %.3f\n", x, y, r);
  }

  return 0;
}

工藤忍は最高や!!ということをプレゼンした(LT)

こんにちは.kurokojiです. 今回は2016/5/12(Thur)に発表したLTについてです.

(記事にするの1ヶ月遅れたおじさんの顔)

スライド

LT

今まで一番楽しかった.自分が好きなことだからやっぱり楽しいよね.


以下忍の話

忍担当です

最初に手に入れたRの帽子を被った垢抜けないような格好(それはそれであり(画像は「工藤忍」でggったら分かると思う))から R+で前髪を出し,左足を後ろに上げ,とてもキュートな姿に瞬間にぼくは

尊い 優勝 天才 神

と感じました.

モバマス始めた

デレステからシンデレラガールズを知りましたが,Pになるにはやはりモバマスもやるべきではと思い,始めました.(結構前に) 最近やっと慣れてきた感じです.

第5回シンデレラガール総選挙

残念ながらランクインならずでしたね. 全て忍に投票したのですがモバマスは未だに無課金故に,ぼく個人の数が圧倒的に少なすぎました.反省点です.

しかし,忍が所属するグループ『フリルドスクエア』のメンバー「喜多見柚」が大健闘の全体11位,Pa4位でした.すごい.

この影響で忍のみならずフリルドスクエアメンバーの人気も上がってほしいです.

ということでね

これからも頑張りたいと思います.