d170: 飛蛾撲火(一)
Tags: computational-geometry
出處:https://zerojudge.tw/ShowProblem?problemid=d170
提交:https://zerojudge.tw/Submissions?problemid=d170&account=allllllan123456
問題:給定三個平面座標上的點,請問第三個點是否有落在以另外兩個點為端點的線段上?
解法:有公認作法。先用外積為零 (二維平面上可以看成斜率相等的移項結果) 檢查三點共線,再利用第三個點分別與第一、二個點所構成的兩個向量之內積結果不為正,以確保它有落在線段上。
1#include <bits/stdc++.h>
2using namespace std;
3
4int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); // IO 優化
5 int X1, Y1, X2, Y2, X3, Y3, N; cin >> N;
6 while (N--) {
7 cin >> X1 >> Y1 >> X2 >> Y2 >> X3 >> Y3;
8 if ((Y3-Y1)*(X2-X3) == (X3-X1)*(Y2-Y3) &&
9 (X1-X3)*(X2-X3)<=0 && (Y1-Y3)*(Y2-Y3)<=0)
10 cout << "該死的東西!竟敢想讓我死!\n";
11 else
12 cout << "父親大人!母親大人!我快到了!\n";
13 }
14 return 0;
15}