HUD2080 夾角有多大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
思路:典型的餘弦定理求夾角的餘弦值,求角的利用反餘弦就可以了
注意:arccos求出來的角度是弧度值,而題上求出來的值是角度值,因此在結果上還應該乘以180/π,反3角函數在c語言中的表示有 acos(double),asin(double),atan(double),atan(double,double),返回值 double 型,弧度值。
AC代碼如下:

#include<stdio.h>
#include<math.h>
int main()
{
	int T;
	double a,b,c,t,x1,y1,x2,y2;
	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);//第二個點到原點的距離
		c=sqrt(pow(x1-x2,2)+pow(y1-y2,2));//兩點之間的距離
		t=acos((a*a+b*b-c*c)/(2*a*b))*(180/acos(-1.0));//因爲cosπ=-1,所以arccos-1=π
		printf("%.2f\n",t);
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章