POJ-2080 角度问题[cmath函数]

 

夹角有多大II

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


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
 

 

Author
xhd
 

 

Source
 

 

Recommend
lcy
 
 
 
 
  正弦(sin)等于对边比斜边;
 
  余弦(cos)等于邻边比斜边;
 
  正切(tan)等于对边比邻边;
 
  余切(cot)等于邻边比对边;
 
  正割(sec)等于斜边比邻边;
 
  余割(csc)等于斜边比对边。 
 
 
余弦定理:
cosA=(b*b+c*c-a*a)/2*b*c
cmath函数中,三角函数表示的是弧度,如果要变成角度,要加上angle=acos()/PI*180     
函数说明:   
using ::abs; //绝对值   
using ::acos; //反余弦   
using ::acosf; //反余弦   
using ::acosl; //反余弦   
using ::asin; //反正弦   
using ::asinf; //反正弦   
using ::asinl; //反正弦   
using ::atan; //反正切   
using ::atan2; //y/x的反正切   
using ::atan2f; //y/x的反正切   
using ::atan2l; //y/x的反正切   
using ::atanf; //反正切   
using ::atanl; //反正切   
using ::ceil; //上取整   
using ::ceilf; //上取整   
using ::ceill; //上取整   
using ::cos; //余弦   
using ::cosf; //余弦   
using ::cosh; //双曲余弦   
using ::coshf; //双曲余弦   
using ::coshl; //双曲余弦   
using ::cosl; //余弦   
using ::exp; //指数值   
using ::expf; //指数值   
using ::expl; //指数值   
using ::fabs; //绝对值   
using ::fabsf; //绝对值   
using ::fabsl; //绝对值   
using ::floor; //下取整   
using ::floorf; //下取整   
using ::floorl; //下取整   
using ::fmod; //求余   
using ::fmodf; //求余   
using ::fmodl; //求余   
using ::frexp; //返回value=x*2n中x的值,n存贮在eptr中   
using ::frexpf; //返回value=x*2n中x的值,n存贮在eptr中   
using ::frexpl; //返回value=x*2n中x的值,n存贮在eptr中   
using ::ldexp; //返回value*2exp的值   
using ::ldexpf; //返回value*2exp的值   
using ::ldexpl; //返回value*2exp的值   
using ::log; //对数   
using ::log10; //对数   
using ::log10f; //对数   
using ::log10l; //对数   
using ::logf; //对数   
using ::logl; //对数   
using ::modf; //将双精度数value分解成尾数和阶   
using ::modff; //将双精度数value分解成尾数和阶   
using ::modfl; //将双精度数value分解成尾数和阶   
using ::pow; //计算幂   
using ::powf; //计算幂   
using ::powl; //计算幂   
using ::sin; //正弦   
using ::sinf; //正弦   
using ::sinh; //双曲正弦   
using ::sinhf; //双曲正弦   
using ::sinhl; //双曲正弦   
using ::sinl; //正弦   
using ::sqrt; //开方   
using ::sqrtf; //开方   
using ::sqrtl; //开方   
using ::tan; //正切   
using ::tanf; //正切   
using ::tanh; //双曲正切   
using ::tanhf; //双曲正切   
using ::tanhl; //双曲正切   
using ::tanl; //正切
 
 
 
 1 #include<iostream>
 2 #include<cmath>
 3 using namespace std;
 4 #define PI 3.141592654
 5 int main()
 6 {
 7     int n;
 8     double x1,y1,x2,y2;
 9     double a,b,c;
10     double angle;
11     while(~scanf("%d",&n))
12     {
13         while(n--)
14         {
15             scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
16             a=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
17             b=sqrt(x1*x1+y1*y1);
18             c=sqrt(x2*x2+y2*y2);
19             angle=acos((x1*x1+y1*y1+x2*x2+y2*y2-((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)))/(2.0*b*c))/PI*180;
20             printf("%.2f\n",angle);
21         }
22     }
23     return 0;
24 }
posted @ 2012-06-01 14:56  max_xbw  阅读(592)  评论(0编辑  收藏  举报