Cho 2 điểm A(x₁,y₁), B(x₂,y₂). Kiểm tra đường thẳng AB có đi qua gốc O(0,0) không.
Điều kiện
3 điểm thẳng hàng ⇔ Diện tích tam giác = 0 ⇔ x₁(y₂ - 0) + x₂(0 - y₁) + 0(y₁ - y₂) = 0
⇔ x₁y₂ = x₂y₁ ⇔ x₁/y₁ = x₂/y₂ (nếu y₁,y₂ ≠ 0).
Chương trình C++
#include <iostream>
using namespace std;
bool passesThroughOrigin(int x1, int y1, int x2, int y2) {
return 1LL * x1 * y2 == 1LL * x2 * y1;
}
int main() {
vector> tests = {
{10,0, 20,0}, // truc x
{0,5, 0,10}, // truc y
{1,1, 2,2}, // y=x
{1,2, 2,5}, // khong qua goc
{-3,6, 2,-4} // y=-2x
};
for (auto [x1,y1,x2,y2] : tests) {
cout << "(" << x1 << "," << y1 << ")-(" << x2 << "," << y2 << "): "
<< (passesThroughOrigin(x1,y1,x2,y2) ? "Qua goc" : "Khong qua goc") << "\n";
}
return 0;
}
Kết quả
(10,0)-(20,0): Qua goc (0,5)-(0,10): Qua goc (1,1)-(2,2): Qua goc (1,2)-(2,5): Khong qua goc (-3,6)-(2,-4): Qua goc