Trong hướng dẫn này, chúng ta sẽ thảo luận về chương trình tìm tâm đường tròn ngoại tiếp (circumcenter) của một tam giác.
Ta được cung cấp ba điểm không thẳng hàng. Nhiệm vụ là tìm tâm đường tròn ngoại tiếp của tam giác được hình thành bởi ba điểm đó.
Ví dụ minh họa
#include <iostream> #include <cfloat> using namespace std; //Lưu trữ giá trị X và Y #define pdd pair<double, double> void lineFromPoints(pdd P, pdd Q, double &a, double &b, double &c){ a = Q.second - P.second; b = P.first - Q.first; c = a*(P.first)+ b*(P.second); } void perpendicularBisectorFromLine(pdd P, pdd Q, double &a, double &b, double &c){ pdd mid_point = make_pair((P.first + Q.first)/2, (P.second + Q.second)/2); c = -b*(mid_point.first) + a*(mid_point.second); double temp = a; a = -b; b = temp; } pdd lineLineIntersection(double a1, double b1, double c1, double a2, double b2, double c2){ double determinant = a1*b2 - a2*b1; if (determinant == 0){ return make_pair(FLT_MAX, FLT_MAX); } else { double x = (b2*c1 - b1*c2)/determinant; double y = (a1*c2 - a2*c1)/determinant; return make_pair(x, y); } } void findCircumCenter(pdd P, pdd Q, pdd R){ double a, b, c; lineFromPoints(P, Q, a, b, c); double e, f, g; lineFromPoints(Q, R, e, f, g); perpendicularBisectorFromLine(P, Q, a, b, c); perpendicularBisectorFromLine(Q, R, e, f, g); pdd circumcenter = lineLineIntersection(a, b, c, e, f, g); if (circumcenter.first == FLT_MAX && circumcenter.second == FLT_MAX){ cout << "Hai đường phân giác vuông góc " "tìm được song song" << endl; cout << "Do đó, các điểm cho không tạo thành " "một tam giác và là thẳng hàng" << endl; } else { cout << "Tâm đường tròn ngoại tiếp tam giác PQR là: "; cout << "(" << circumcenter.first << ", " << circumcenter.second << ")" << endl; } } int main(){ pdd P = make_pair(6, 0); pdd Q = make_pair(0, 0); pdd R = make_pair(0, 8); findCircumCenter(P, Q, R); return 0; }Kết quả
Tâm đường tròn ngoại tiếp tam giác PQR là: (3, 4)