Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Kiểm tra vị trí điểm đối với đường thẳng (Above-Below-On Test) trong C++


Xác định vị trí điểm T(xt, yt) so với đường thẳng L nối hai điểm M(x1,y1), N(x2,y2) bằng giá trị:

Y = (y2-y1)*xt + (x1-x2)*yt + (x2*y1 - x1*y2)

  • Y < 0 → T nằm nửa mặt phẳng theo chiều kim đồng hồ (bên trái/dưới)
  • Y > 0 → T nằm nửa mặt phẳng ngược chiều kim đồng hồ (bên phải/trên)
  • Y = 0 → T nằm trên đường thẳng

Ví dụ minh họa

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
    srand(time(0));
    int x1 = rand()%21, y1 = rand()%21;
    int x2 = rand()%21, y2 = rand()%21;

    cout << "Duong thang: (" << y2-y1 << ")x + (" << x1-x2 << ")y + (" << x2*y1-x1*y2 << ") = 0" << endl;
    int x, y; cout << "Nhap diem (x y): "; cin >> x >> y;

    int s = (y2-y1)*x + (x1-x2)*y + (x2*y1 - x1*y2);
    if (s < 0) cout << "Diem nam DUOI/BEN TRAI duong thang";
    else if (s > 0) cout << "Diem nam TREN/BEN PHAI duong thang";
    else cout << "Diem nam TREN duong thang";
    return 0;
}

Kết quả (ví dụ)

Duong thang: (7)x+(0)y+(-105) = 0
Nhap diem (x y): 7 6
Diem nam DUOI/BEN TRAI duong thang