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

Kiểm tra điểm nằm trong/ngoài/trên đường tròn xác định bởi 3 điểm trong C++


Cho 3 điểm A, B, C xác định một đường tròn. Kiểm tra điểm D nằm trong, ngoài hay trên đường tròn đó bằng công thức:

s = (x - xc)² + (y - yc)² - r²

  • s < 0 → D trong đường tròn
  • s > 0 → D ngoài đường tròn
  • s = 0 → D trên đường tròn

Thuật toán

Bắt đầu
  Nhập 3 điểm A, B, C
  Tính tâm (xc, yc) và bán kính r của đường tròn qua 3 điểm
  Nhập điểm D (u, v)
  Tính s = (u-xc)² + (v-yc)² - r²
  So sánh s với 0 để in kết quả
Kết thúc

Ví dụ minh họa

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

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

    // Tính tâm đường tròn (giao điểm hai trung trực)
    double a1 = (y1 - y2) / (x1 - x2);
    double a2 = (y3 - y2) / (x3 - x2);
    double xc = (a1*a2*(y3-y1) + a1*(x2+x3) - a2*(x1+x2)) / (2*(a1-a2));
    double yc = ((x1+x2)/2 - xc)/(-a1) + (y1+y2)/2;
    double r = sqrt((x3-xc)*(x3-xc) + (y3-yc)*(y3-yc));

    cout << "3 diem tren duong tron: (" << x1 << "," << y1 << "), ("
         << x2 << "," << y2 << "), (" << x3 << "," << y3 << ")" << endl;
    cout << "Tam: (" << xc << "," << yc << "), Ban kinh: " << r << endl;

    int u, v; cout << "Nhap diem can kiem tra: "; cin >> u >> v;
    double s = (u-xc)*(u-xc) + (v-yc)*(v-yc) - r*r;

    if (s < 0) cout << "Diem nam TRONG duong tron";
    else if (s > 0) cout << "Diem nam NGOAI duong tron";
    else cout << "Diem nam TREN duong tron";
    return 0;
}

Kết quả (ví dụ)

3 diem tren duong tron: (8,4), (9,17), (5,9)
Tam: (12.6364, 10.8182), Ban kinh: 7.84983
Nhap diem can kiem tra: 7 6
Diem nam NGOAI duong tron