10242 Fourth Point!!

題目連結

題目敘述

已知一個平行四邊形中兩條相鄰邊的端點座標,請找出第四個點的座標。

輸入格式

每一行包含八個浮點數,分別代表:

  • 第一條邊的一個端點(x₁, y₁)

  • 第一條邊的另一個端點(x₂, y₂)

  • 第二條邊的一個端點(x₃, y₃)

  • 第二條邊的另一個端點(x₄, y₄)

座標單位是公尺(meter),精確到最接近的毫米(0.001 m)」。 所有的座標值範圍在 -10,000 到 10,000 之間。 輸入直到檔案結束 EOF。

注意:輸入的四個點中,有兩個點是相同的即兩條相鄰邊的交點。

輸出格式

對於每一組輸入,輸出第四個點的(x, y)座標,單位是公尺,並且以小數點后三位輸出(即到最接近的毫米),座標之間以一個空格分隔。

解題思路

先找到重複的點(x, y),用(ansx, ansy)代表第四個點預設為(x, y),再加上剩餘兩點與 x, y 的差(xi - x, yi - y),最後用 fixedsetprecision(3) 輸出小數點後三位。

程式碼

#include<bits/stdc++.h>
using namespace std;

int main() {
    double x, y, c[4][2], ansx, ansy;
    while (cin >> c[0][0] >> c[0][1] >> c[1][0] >> c[1][1] >> c[2][0] >> c[2][1] >> c[3][0] >> c[3][1]) {
        for (int i = 0; i < 3; i++) {
            for (int j = i + 1; j <= 3; j++) {
                if (c[i][0] == c[j][0] && c[i][1] == c[j][1]) {
                    x = c[i][0];
                    y = c[i][1];
                }
            }
        }
        ansx = x;
        ansy = y;
        for (int i = 0; i < 4; i++){
            if (c[i][0] != x || c[i][1] != y) {
                ansx += c[i][0] - x;
                ansy += c[i][1] - y;
            }
        }
        cout << fixed << setprecision(3) << ansx << " " << ansy << "\n";
    }
}