CPE 一顆星選集 49 道必考題
題目連結:https://zerojudge.tw/ShowProblem?problemid=e512
內容
給定平行四邊形的兩個相鄰邊端點座標(x, y),求出第四個點座標(x, y)。
輸出取到小數點後三位。
範例輸入
0.000 0.000 0.000 1.000 0.000 1.000 1.000 1.000
1.000 0.000 3.500 3.500 3.500 3.500 0.000 1.000
1.866 0.000 3.127 3.543 3.127 3.543 1.412 3.145
範例輸出
1.000 0.000
-2.500 -2.500
0.151 -0.398
想法
找出兩相鄰邊之交點,求出交點與另外兩點其中一點的 x, y 變化量,對另一點做運算,即可得到第四點。
程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <bits/stdc++.h> #define fastio ios_base::sync_with_stdio(false), cin.tie(nullptr) using namespace std;
int main(){ fastio; double x[4], y[4], xx, yy; double dx, dy; while(cin >> x[0] >> y[0]){ for(int i = 1; i < 4; ++i) cin >> x[i] >> y[i]; if(x[0] == x[2] && y[0] == y[2]){ dx = x[1] - x[0], dy = y[1] - y[0]; xx = x[3] + dx, yy = y[3] + dy; } else if(x[1] == x[2] && y[1] == y[2]){ dx = x[3] - x[2], dy = y[3] - y[2]; xx = x[0] + dx, yy = y[0] + dy; } else if(x[1] == x[3] && y[1] == y[3]){ dx = x[2] - x[1], dy = y[2] - y[1]; xx = x[0] + dx, yy = y[0] + dy; } else { dx = x[2] - x[0], dy = y[2] - y[0]; xx = x[1] + dx, yy = y[1] + dy; } cout << fixed << setprecision(3) << xx << " " << yy << "\n"; } }
|