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òns > 0→ D ngoài đường tròns = 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