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°


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM