e512: 10242 - Fourth Point!!

  1. 1. 內容
  2. 2. 範例輸入
  3. 3. 範例輸出
  4. 4. 想法
  5. 5. 程式碼

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 變化量,對另一點做運算,即可得到第四點。

程式碼

C++
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";
}
}