zoukankan      html  css  js  c++  java
  • HDU 2080 夹角有多大II (数学) atan(y/x)分类求角度

    夹角有多大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
     

    题目是求 顶点为原点的角的角度;
    既然顶点为原点 如图 :
    夹角θ=θb-θa θa=atan(a.y/a.x)
    而这题 需要解决问题是:
    假如:一个点是(-2,-2),-2/-2=1,atan(1)=45° 而 pOx的夹角为180°+45° 所以类似我们需要分类讨论。
    四个象限:
    第一象限:(x>0,y>0): θ=atan(y/x)
    第二象限:(x<0,y>0): θ=atan(y/x)+180
    第三象限:(x<0,y>0): θ=atan(y/x)+180
    第四象限:(x<0,y>0): θ=atan(y/x)+360
    四个方向轴:
    X轴正方向:(2,0)  atan(2/0)=0°
    Y轴正方向:(0,2)  atan(0/2)=90°
    X轴负方向:(-2,0)  atan(-2/0)=-0°  实际为180° 所以+180°
    Y轴负方向:(0,-2)  atan(0/-2)=-90° 实际为270° 说以+360°
     
    总结 一下就是函数 function_2 中的4中情况。

    AC代码如下:
     1 #include <iostream>
     2 #include <cmath>
     3 #include <cstdio>
     4 using namespace std;
     5 const double pi=3.14159265;
     6 struct Point
     7 {
     8     double x,y;
     9     //Point(int X,int Y):x(X),y(Y){};
    10 };
    11 inline double function_1(double hd)
    12 {
    13     return 180/pi*hd;
    14 }
    15 inline double function_2(Point p)
    16 {
    17     if(p.x>=0&&p.y>=0)
    18         return function_1(atan(p.y/p.x));
    19     else if(p.x<0&&p.y>=0)
    20         return function_1(atan(p.y/p.x))+180;
    21     else if(p.x<0,p.y<=0)
    22         return function_1(atan(p.y/p.x))+180;
    23     else
    24         return function_1(atan(p.y/p.x))+360;
    25 }
    26 int main()
    27 {
    28     int n;
    29     cin>>n;
    30     while(n--)
    31     {
    32         Point p1,p2;
    33         double o=0;
    34         cin>>p1.x>>p1.y>>p2.x>>p2.y;
    35         //cout<<function_2(p1)<<" "<<function_2(p2)<<endl;
    36         o=abs(function_2(p1)-function_2(p2));
    37         //cout<<o<<endl;
    38         printf("%.2lf
    ",o);
    39 
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    北京,第七天
    北京!北京!第五天
    关于模板中的动态取值 ---反射与javascript脚本编译
    InstallShield Limited Edition for Visual Studio 2013
    使用WebFrom来模拟一些MVC的MODEL与View的数据交互功能
    关于.net 对excel操作的方法
    关于Aspose对于Word操作的一些扩展及思考
    各种注释与取消注释的快捷键
    安装Vivado时遇到的问题及解决
    apache pdfbox简单读取内容
  • 原文地址:https://www.cnblogs.com/Twobox/p/6506527.html
Copyright © 2011-2022 走看看