杭电 2080

题目链接: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;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容