POJ 2242.The Circumference of the Circle

题目为给定三角形三个点,计算外接圆的周长,这个要用到一点三角函数的知识,都忘记的差不多了也是从网上搜其他人的思路才搜出来...

a/sinA = 2R 其中R是外接圆半径

在各种公式中使用到的PI可以通过PI = acos(-1)得到最为准确的值(cos(PI) = -1等价arccos(-1) = PI)

这是第一道涉及计算几何类使用的题目,是最基础的计算几何,练习目的就是为了熟悉一下这些类的使用,在更难的题中也会有这些基础操作,还要继续学习啊QAQ

题目链接

#include 
#include 

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<

 

你可能感兴趣的:(POJ,2242,计算几何,向量,数学思想)