夜空中最亮的星

时间:2022-11-12 23:46:20

题意:给出两个点在两个坐标系中的坐标,求两个坐标系的夹角。

思路:只要求出一这两个点为向量在两个坐标系(即两个向量的夹角)

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;

const double PI = 3.14159265358;

struct node
{
    double x,y,w;
}a[1005];

bool cmp(node b1,node b2)
{
    return b1.w < b2.w;
}

double fin(double x1,double y1,double x2,double y2)//求向量夹角
{
    double t=(x1*x2+y1*y2)/(sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2));
    double ret = acos(t);
    return ret*180/PI;
}

int main()
{
    int T,n,i;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(i = 0; i < n; i++)
        scanf("%lf%lf%lf",&a[i].x,&a[i].y,&a[i].w);
        sort(a,a+n,cmp);
        double x1,x2,y1,y2;
        scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
        x1 = x2 - x1;
        y1 = y2 - y1;
        x2 = a[1].x - a[0].x;
        y2 = a[1].y - a[0].y;
        printf("%.3lf\n",fin(x1,y1,x2,y2));
    }
    return 0;
}