题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2080
夹角有多大II
Problem Description
这次xhd面临的问题是这样的:在一个平面内有两个点,求两个点分别和原点的连线的夹角的大小。
注:夹角的范围[0,180],两个点不会在圆心出现。
Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据有四个实数x1,y1,x2,y2分别表示两个点的坐标,这些实数的范围是[-10000,10000]。
Output
对于每组输入数据,输出夹角的大小精确到小数点后两位。
Sample Input
2
1 1 2 2
1 1 1 0
Sample Output
0.00
45.00
解题思路:
a·b=(x1*x2+y1*y2)=|a||b|·cosθ
几何意义,向量a在向量b方向上的投影与向量b的模的乘积
可以求出cosθ,利用反三角函数求出角度,由于是弧度制,要转角度制,同时pi的精度要够大。
解题中用到的一点技巧
1 pi=acos(-1);
2 sqrt( )函数开平方;
3 %.2f 控制输出的格式
4 1度=π/180≈0.01745弧度,1弧度=180/π≈57.3度。
代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int t;
double x1,y1,x2,y2;
double pi,sum,angle;
pi=acos(-1);
while(~scanf("%d",&t))
{
while(t--)
{
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
sum=(x1*x2+y1*y2)/(sqrt((x1*x1+y1*y1))*sqrt((x2*x2+y2*y2)));
angle=acos(sum)*180/pi;
printf("%.2f\n",angle);
}
}
return 0;
}