夹角有多大II

来源:互联网 发布:银行大数据 编辑:程序博客网 时间:2024/04/27 15:51

夹角有多大II

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7426    Accepted Submission(s): 3734


Problem Description
这次xhd面临的问题是这样的:在一个平面内有两个点,求两个点分别和原点的连线的夹角的大小。

注:夹角的范围[0,180],两个点不会在圆心出现。
 


 

Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据有四个实数x1,y1,x2,y2分别表示两个点的坐标,这些实数的范围是[-10000,10000]。
 


 

Output
对于每组输入数据,输出夹角的大小精确到小数点后两位。
 


 

Sample Input
21 1 2 21 1 1 0
 


 

Sample Output
0.0045.00
解题思路:考察acosx的用法
余弦定理。  cosC = (a^2 + b^2 - c^2) / (2·a·b)  cosB = (a^2 + c^2 - b^2) / (2·a·c)  cosA = (c^2 + b^2 - a^2) / (2·b·c)a,b,c为三角形三边长度,A,B,C分别为边a,b,c相对的角。
 
源代码:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#define PI 3.1415926

int main()
{
  int t;
  double x1,y1,x2,y2,answer;
  double a,b,c,up,down;
  scanf("%d",&t);
  while(t--)
  {
    scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
    a=x1*x1+y1*y1;
    b=x2*x2+y2*y2;
    c=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
    up=a+b-c;
    down=2*sqrt(a)*sqrt(b); 
    answer=acos(up/down);
    printf("%.2lf\n",answer/PI*180);    
  }
  system("pause");
  return 0;   
}


 

0 0
原创粉丝点击