题目为给定三角形三个点,计算外接圆的周长,这个要用到一点三角函数的知识,都忘记的差不多了也是从网上搜其他人的思路才搜出来...
a/sinA = 2R 其中R是外接圆半径
在各种公式中使用到的PI可以通过PI = acos(-1)得到最为准确的值(cos(PI) = -1等价arccos(-1) = PI)
这是第一道涉及计算几何类使用的题目,是最基础的计算几何,练习目的就是为了熟悉一下这些类的使用,在更难的题中也会有这些基础操作,还要继续学习啊QAQ
#include <iostream>
#include <cmath>
class CVector//向量类
{
public:
double x,y;
CVector()
{
x=0;
y=0;
}
CVector(double a,double b)
{
x=a;
y=b;
}
};
double length(CVector p)
{
return sqrt(p.x*p.x+p.y*p.y);
}
double operator ^(CVector p,CVector q)//这个计算的是两个向量所构成的平行四边形的面积
{
return p.x*q.y - q.x*p.y;
}
double PI = acos(-1);
using namespace std;
int main(void)
{
double x1,y1,x2,y2,x3,y3;
while(cin>>x1>>y1>>x2>>y2>>x3>>y3)
{
CVector p,q,k;
p = CVector(x2-x1,y2-y1);
q = CVector(x3-x1,y3-y1);
double temps;
temps = abs((p^q)*1.0/2);
double sintemp = abs(temps*1.0*2)/(length(p)*length(q));//s = 1/2*|a|*|b|*sinC 反向使用
k = CVector(x3-x2,y3-y2);
double lenk = length(k);
double R = lenk/(sintemp*2);
printf("%.2lf\n",2*PI*R);
}
// 简易小型测试
// double t;
// CVector p,q;
// p=CVector(0,1);
// q=CVector(1,0);
// t=p^q;
// cout<<t<<endl;
// printf("%.2lf",t);
}