CGL_2_C 線分の交点
目次
# 問題
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=CGL_2_C
2つの線分の交点を求める問題.
必ず交点をもつ線分が与えられる.
# 解説
線分の交点の座標を求めるアルゴリズムについては以下を参照.
線分の交点を求めるアルゴリズム最後にが0の誤差範囲内であれば0と出力することを忘れずに.
# 解答
Int N;
Vector2 p0, p1, p2, p3;
Vector2 crossPoint() {
Vector2 baseSeg = p1 - p0;
Vector2 crossSeg = p3 - p2;
double h1 = fabs(baseSeg.cross(p2 - p0)) / (baseSeg.length() * 2);
double h2 = fabs(baseSeg.cross(p3 - p0)) / (baseSeg.length() * 2);
return p2 + crossSeg * h1 / (h1 + h2);
}
void solve() {
Vector2 p = crossPoint();
if (fabs(p.x) < EPS) cout << 0;
else cout << p.x;
cout << ' ';
if (fabs(p.y) < EPS) cout << 0;
else cout << p.y;
cout << endl;
}
void input() {
cin >> N;
while (cin >> p0 >> p1 >> p2 >> p3) {
solve();
}
}
int main() {
cout.precision(15);
input();
}