POJ 2624 - 4th Point

http://poj.org/problem?id=2624

概要

平行四辺形の2つの隣接する辺の両端の座標が与えられるので,残りの4つ目の頂点の座標を答える.

制約

解法

与えられた4つの座標のどれとどれが一致しているか判定して,それぞれの場合について求める.

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <complex>
 4 using namespace std;
 5 typedef complex<double> P;
 6 static const double EPS = 1e-4;
 7 static const P P_EPS = P(EPS, EPS);
 8 
 9 int main()
10 {
11   P a, b, c, d;
12   while (cin >> a.real() >> a.imag() >> b.real() >> b.imag()
13       >> c.real() >> c.imag() >> d.real() >> d.imag()) {
14 
15     if (abs(a-b) < EPS) {
16       // a = c, b = d, c = a&b
17       b = c;
18       c = a;
19       b = d;
20       a = b;
21     } else if (abs(b-c) < EPS) {
22       // a=a, b=d, c=b&c
23       b = d;
24     } else if (abs(c-d) < EPS) {
25       // a=a, b=b, c=c&d
26     } else if (abs(a-c) < EPS) {
27       // a=d, b=b, c=a&c
28       a = d;
29     } else if (abs(b-d) < EPS) {
30       // a=a, b=c, c=b&d
31       b = c;
32       c = d;
33     } else {
34       // a=c, b=b, c=a&d
35       a = c;
36       c = d;
37     }
38 
39     P ans = a + b -c;
40     printf("%.3f %.3f\n", ans.real(), ans.imag());
41   }
42   return 0;
43 }
poj/2624.cc