題目爲給定三角形三個點,計算外接圓的周長,這個要用到一點三角函數的知識,都忘記的差不多了也是從網上搜其他人的思路才搜出來...
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);
}