• Math.Atan2 方法


    返回正切值为两个指定数字的商的角度。

    public static double Atan2 (
        double y,
        double x
    )

    参数

    y

    点的 y 坐标。

    x

    点的 x 坐标。

    返回值

    角 θ,以弧度为单位,满足 -πθπ,且 tan(θ) = y / x,其中 (x, y) 是笛卡儿平面中的点。请看下面:
    • 如果 (x, y) 在第 1 象限,则 0 < θ < π/2。

    • 如果 (x, y) 在第 2 象限,则 π/2 < θπ

    • 如果 (x, y) 在第 3 象限,则 -π < θ < -π/2。

    • 如果 (x, y) 在第 4 象限,则 -π/2 < θ < 0。

    备注
     返回值为笛卡尔平面中的角度,该角度由 x 轴和起点为原点 (0,0)、终点为 ( x,y ) 的向量构成。
     
    using System;
    
    class Sample 
    {
        public static void Main() 
        {
        double x = 1.0;
        double y = 2.0;
        double angle;
        double radians;
        double result;
    
    // Calculate the tangent of 30 degrees.
        angle = 30;
        radians = angle * (Math.PI/180);
        result = Math.Tan(radians);
        Console.WriteLine("The tangent of 30 degrees is {0}.", result);
    
    // Calculate the arctangent of the previous tangent.
        radians = Math.Atan(result);
        angle = radians * (180/Math.PI);
        Console.WriteLine("The previous tangent is equivalent to {0} degrees.", angle);
    
    // Calculate the arctangent of an angle.
        String line1 = "{0}The arctangent of the angle formed by the x-axis and ";
        String line2 = "a vector to point ({0},{1}) is {2}, ";
        String line3 = "which is equivalent to {0} degrees.";
    
        radians = Math.Atan2(y, x);
        angle = radians * (180/Math.PI);
    
        Console.WriteLine(line1, Environment.NewLine);
        Console.WriteLine(line2, x, y, radians);
        Console.WriteLine(line3, angle);
        }
    }

    C语言中的atan和atan2

    https://www.cnblogs.com/dutlei/archive/2013/01/14/2860332.html

     

    在C语言的math.h或C++中的cmath中有两个求反正切的函数atan(double x)与atan2(double y,double x)  他们返回的值是弧度 要转化为角度再自己处理下。

    前者接受的是一个正切值(直线的斜率)得到夹角,但是由于正切的规律性本可以有两个角度的但它却只返回一个,因为atan的值域是从-90~90 也就是它只处理一四象限,所以一般不用它。

    第二个atan2(double y,double x) 其中y代表已知点的Y坐标 同理x ,返回值是此点与远点连线与x轴正方向的夹角,这样它就可以处理四个象限的任意情况了,它的值域相应的也就是-180~180了

    例如:

    例1:斜率是1的直线的夹角

    cout<<atan(1.0)*180/PI;//45°

    cout<<atan2(1.0,1.0)*180/PI;//45° 第一象限

    cout<<atan2(-1.0,-1.0)*180/PI;//-135°第三象限

    后两个斜率都是1 但是atan只能求出一个45°

    例2:斜率是-1的直线的角度

    cout<<atan(-1.0)*180/PI;//-45°

    cout<<atan2(-1.0,1.0)*180/PI;//-45° y为负 在第四象限

    cout<<atan2(1.0,-1.0)*180/PI;//135° x为负 在第二象限

    常用的不是求过原点的直线的夹角 往往是求一个线段的夹角 这对于atan2就更是如鱼得水了

    例如求A(1.0,1.0) B(3.0,3.0)这个线段AB与x轴正方向的夹角

    用atan2表示为 atan2(y2-y1,x2-x1) 即 atan2(3.0-1.0,3.0-1.0)

    它的原理就相当于把A点平移到原点B点相应变成B'(x2-x1,y2-y1)点 这样就又回到先前了

    例三:

    A(0.0,5.0) B(5.0,10.0)

    线段AB的夹角为

    cout<<atan2(5.0,5.0)*180/PI;//45°

  • 相关阅读:
    hadoop基础学习---数据管理策略
    hadoop基础学习---基本概念
    hadoop配置
    linux配置java环境
    Linux使用expect实现自动登录的脚本
    机器学习系列-寒小阳
    深度学习与计算机视觉系列-寒小阳
    深度学习与计算机视觉(12)_tensorflow实现基于深度学习的图像补全
    深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统
    深度学习与计算机视觉系列(10)_细说卷积神经网络
  • 原文地址:https://www.cnblogs.com/dearzhoubi/p/8873656.html
Copyright © 2020-2023  润新知