b899 - 2. 物品探測
題目描述
題目給定三個點的座標,要求找出第四個點,使得這四個點構成一個平行四邊形。輸出第四個點的座標。
解題思路
題目要求找出第四個點,使得三個給定的點和這個點構成一個平行四邊形。平行四邊形的性質是,對角線的中點相同。因此,我們可以考慮三種情況:
- 以給定的三個點中的任意兩個點作為對角線的端點,求出對角線的中點,然後根據中點公式求出第四個點的座標。
- 檢查哪兩個點構成的邊最長,最長的邊對應的點是平行四邊形的頂點。
- 根據平行四邊形的性質,第四個點的座標可以通過向量加法得到。例如,如果 A, B, C 是給定的三個點,那麼第四個點 D 可以是 A + C - B,或者 B + A - C,或者 B + C - A。
程式碼中,計算了三個點兩兩之間的距離的平方,然後根據距離的大小判斷哪個點是平行四邊形的頂點,並計算出第四個點的座標。
複雜度分析
- 時間複雜度: O(1)
- 空間複雜度: O(1)
程式碼
#include <iostream>
using namespace std;
int main(){
int x1,x2,x3,y1,y2,y3;
while(cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3){
int ab=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
int ac=(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3);
int bc=(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3);
if(ab>ac&&ab>bc)
cout << x1+x2-x3 << " " << y1+y2-y3 << endl;
else if(ac>ab&&ac>bc)
cout << x1+x3-x2 << " " << y1+y3-y2 << endl;
else
cout << x2+x3-x1 << " " << y2+y3-y1 << endl;
}
}