首页 > ACM题库 > HDU-杭电 > hdu 2080 夹角有多大II-数学相关-[解题报告]C++
2013
12-29

hdu 2080 夹角有多大II-数学相关-[解题报告]C++

夹角有多大II

问题描述 :

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

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

输入:

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

输出:

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

样例输入:

2
1 1 2 2
1 1 1 0

样例输出:

0.00
45.00

点击打开链接

PS:夹角用余弦定理:c*c=b*b+a*a-2*b*a*cos(C);

a=sqrt(x1*x1+y1*y1);—-1

b=sqrt(x2*x2+y2*y2);—-2

m=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

由以上各式可得:cos(C)=(x1*x2+y1*y2)/(a*b);

#include<stdio.h>
#include<math.h>
#define PI 3.141592654
#define esp 1e-10
int main()
{
	int t;
	double x1,x2,y1,y2,a,b,m;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
		a=sqrt(x1*x1+y1*y1);
		b=sqrt(x2*x2+y2*y2);
		m=(x1*x2+y1*y2)/(a*b);
		printf("%.2f\n",acos(m)*180/PI);
	}
	return 0;
}

解题转自:http://blog.csdn.net/yangyafeiac/article/details/7828583


  1. 题本身没错,但是HDOJ放题目的时候,前面有个题目解释了什么是XXX定律。
    这里直接放了这个题目,肯定没几个人明白是干啥