计蒜客 2019 蓝桥杯省赛 A 组模拟赛(一)F 掎角之势

  • 题目链接 :https://nanti.jisuanke.com/t/A2226
  • 题意:给定三个点,求三角形的内切圆和外接圆的面积(需要先判断是否能构成三角形)
  • 思路:
    1)判断三角形 :不要用a+b>c的方法了!既然上了大学就用叉乘,判断向量叉乘是否 = 0,如果是0就无法构成三角形。
    2)求三角形面积:不要用海伦公式了!既然上了大学就用叉乘,向量a向量b = ab*sinα = 1/2 S
  • 代码:
#include "bits/stdc++.h"
#define fori(i,l,u) for(int i = l;i < u;i++)
#define forj(j,l,u) for(int j = l;j < u;j++)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn = 1e5;
int T;
double a1,b1,a2,b2,a3,b3;
double A,B,C;
double s = 0;
double S1,S2,r1,r2;
double length(double a1,double b1,double a2,double b2){
    return sqrt(pow(a1-a2,2)+pow(b1-b2,2));
}
int main(){
    freopen("1.txt","r",stdin);
    cin>>T;
    while (T--) {
        cin>>a1>>b1>>a2>>b2>>a3>>b3;
        A = length(a1,b1,a2,b2);
        B = length(a1,b1,a3,b3);
        C = length(a2,b2,a3,b3);
        s = fabs((a1-a2)*(b3-b2) - (b1-b2)*(a3-a2));
        if (s == 0) {
            cout<<"NO SOLUTION"<<endl;
        }else{
            r1 = s/(A+B+C);
            r2 = (A*B*C)/(2*s);
            S1 = M_PI*r1*r1;
            S2 = M_PI*r2*r2;
            printf("%.10lf %.10lf\n",S1,S2);
        }
    }
    return 0;
}

  • 遇到的问题:
    1)好久不写题忘了叉乘怎么求了。。。
    2)刚开始想用叉乘判断是否构成三角形时需不需要三个向量两两相乘,但是只要是俩向量叉乘 = 0就三点一线,构不成,否则肯定≠0.
    3)都用double。并且最后输出的时候用printf能精确小数点的位数。
    4)π在c/cpp里是M_PI 表示。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章