ACM___________________________

______________白白の屋
posts - 182, comments - 102, trackbacks - 0, articles - 0

HDOJ HDU 2080 夹角有多大II ACM 2080 IN HDU

Posted on 2010-08-07 15:11 MiYu 阅读(619) 评论(2)  编辑 收藏 引用 所属分类: ACM ( 数论 )
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

题目地址:
         http://acm.hdu.edu.cn/showproblem.php?pid=2080
题目描述:
Problem Description
这次xhd面临的问题是这样的:在一个平面内有两个点,求两个点分别和原点的连线的夹角的大小。

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

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

题目分析:
         纯数学题.   有多边型面积公式, 我们可以得到 三角型的面积 : S = ( x0 * y1 - x1 * y0 ) / 2.
而由三角型正弦定理我们知道 : S = 1 / 2 * A * B * sinV . 联立 2方程就可以得到 夹角V 的解
的方程 :  sinV =  ( x0 * y1 - x1 * y0 ) / A / B ;       最后利用 c 数学库函数 asin就可以求出V的弧
度值, 把弧度转换成角度就可以了.   ( 注意平角和钝角的判断 )

代码如下 :
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

#include 
<iostream>
#include 
<cmath>
#include 
<iomanip>
using namespace std;
int main ()
{
    
int T;
    cin 
>> T;
    
while ( T -- )
    {
            
double x0,x1,y0,y1;
            cin 
>> x0 >> y0 >> x1 >> y1;
            
double A = sqrt ( x0 * x0 * 1.0 + y0 * y0 * 1.0 );
            
double B = sqrt ( x1 * x1 * 1.0 + y1 * y1 * 1.0 );
            
double resin = ( fabs ( x0 * y1 - x1 * y0 ) ) / A / B ;
            
double res = asin ( resin ) * 180.0 / acos( -1 );
            res 
= res < 1e-5 ? ( x0 * x1 < 0 ? 180.0 : 0.0 )                          //平角 
                             : ( x0 * x1 <= 0 && y0 * y1 <= 0 ? 180.0 - res : res );  //是否钝角                        
            cout << setprecision (2<< setiosflags ( ios::fixed ) << res << endl;
    }
    
return 0
}

Feedback

# re: HDOJ HDU 2080 夹角有多大II ACM 2080 IN HDU   回复  更多评论   

2011-06-03 11:46 by manfeyn
题目对钝角的判断不完整

如(1,1)(-1,1)夹角为90,则(5,1)(-1,1)显然是钝角
而 x0 * x1 <= 0 && y0 * y1 <= 0 不满足,则角度为锐角

# re: HDOJ HDU 2080 夹角有多大II ACM 2080 IN HDU   回复  更多评论   

2011-08-15 18:52 by bell
你的编译有错误哟。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理