该算法给出的题目就是根据已给出的三个点的坐标,求出所给三角形外切圆的周长,此题的关键是在于求出园的半径,如果按照普通的做法求出两条边的垂直平分线,再求出圆心,最后求出半径比较麻烦,可以直接用公式求出外切圆的周长公式如下:
三角形三边a,b,c,半周长p(p=(a+b+c)/2) 面积:S= √[p(p - a)(p - b)(p - c)] 外接圆半径 R=abc/4S 外接圆半径 R=abc/4√[p(p - a)(p - b)(p - c)] 外接圆周长C=2*PAI*R
其实这道题更偏向于数学题,最后给出代码
#include<iostream> #include<iomanip> #include<math.h> using namespace std; int main() { //三角形三边a,b,c,半周长p(p=(a+b+c)/2) //面积:S= √[p(p - a)(p - b)(p - c)] //外接圆半径 R=abc/4S //外接圆半径 R=abc/4√[p(p - a)(p - b)(p - c)] //外接圆周长C=2*PAI*R double PI = 3.141592653589793; double x1, y1, x2, y2, x3, y3; while (cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3) { double a = sqrt((x1-x2)*(x1 - x2)+(y1-y2)*(y1-y2)); double b = sqrt((x1 - x3)*(x1 - x3) + (y1 - y3)*(y1 - y3)); double c = sqrt((x3 - x2)*(x3 - x2) + (y3 - y2)*(y3 - y2)); double p = (a + b + c) / 2; cout << fixed << setprecision(2)<< 2 * PI*a*b*c / (4 * sqrt(p*(p - a)*(p - b)*(p - c))) << endl; } return 0; }
指的注意的是在接收输入的三个点的坐标时要用double类型,否则虽然可以通过样例,但是会报错。