寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C++ #CGL_2_C : Cross Point

Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。

・問題 "Cross Point"
https://onlinejudge.u-aizu.ac.jp/problems/CGL_2_C
・交点

僕が作成、提出したコードは、以下のとおりです。

Aizu Online Judge in C++ #CGL_2_C : Cross Point
/*
Aizu Online Judge in C++ #CGL_2_C : Cross Point
https://onlinejudge.u-aizu.ac.jp/problems/CGL_2_C
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
typedef complex<double> P;
P f(P a,P b,P c,P d){
    a-=d;
    b-=d;
    c-=d;
    return (d+a+(b-a)*imag(a/c)/imag(a/c-b/c));
}
int main(void){
    int n;
    cin>>n;
    double ax,ay,bx,by,cx,cy,dx,dy;
    while(n--){
        cin>>ax>>ay>>bx>>by>>cx>>cy>>dx>>dy;
        P ans=f(P(ax,ay),P(bx,by),P(cx,cy),P(dx,dy));
        cout<<fixed<<setprecision(10)<<ans.real()<<" ";
        cout<<fixed<<setprecision(10)<<ans.imag()<<endl;
    }
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/