POJ 2242.The Circumference of the Circle

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

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);
    
    
    
    
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章