【问题标题】:From Coordinate to Degree从坐标到度
【发布时间】:2011-11-19 21:42:21
【问题描述】:

我怎样才能从笛卡尔坐标中获得从 0 到 360 的角度:

{1,0}  = 0   Degree
{0,1}  = 90  Degrees
{-1,0} = 180 Degrees
{0,-1} = 270 Degrees

我很难用 ArcTan 获得 180 到 359 的角度下注...

【问题讨论】:

    标签: wolfram-mathematica coordinates


    【解决方案1】:

    试试:

    f[x_List] := Mod[ArcTan @@ x /Pi 180 Degree, 360 Degree]
    
    f /@ {{0, -1}, {0, 1}, {1, 0}, {-1, 0}}
    (*
     -> {270 \[Degree], 90 \[Degree], 0, 180 \[Degree]}
    *)
    

    编辑

    由于先前的形式受到批评,这里有另一种方法可以做到这一点。按照我的口味,不太容易理解:

    f = (180 /Pi ArcTan @@ #)~Mod~360 &
    

    【讨论】:

    • 你为什么用f[#]&而不是f
    • @Sza 像往常一样,我尝试了几种替代方法,却忘了清理代码:)
    • 你为什么用ArcTan[Sequence @@ x]而不是ArcTan @@ x
    • @Sjoerd 因为我认为 OP 更容易理解
    • 我会说你让它变得更复杂了。第一种形式怎么会比第二种形式简单?
    【解决方案2】:

    试试这个:

    CoordinateToDegree[x_?NumberQ, y_?NumberQ] := 
     Rescale[ArcTan[-x, y], {-Pi, Pi}, {360, 0}]
    

    使用ArcTan[-x,y],您将在分支切割处对齐,以便获得角度的连续函数。然后Rescale 将范围-Pi...Pi 映射到0...360

    这里是简单的Manipulate,它演示了这个解决方案:

    Manipulate[
     Graphics[{
      Orange, Disk[],
      Black, Text[Style[CoordinateToDegree[Cos[t], Sin[t]], "Title"], {Cos[t], Sin[t]}]},
     PlotRange -> 1.4], {t, 0, 2 \[Pi]}]
    

    【讨论】:

      【解决方案3】:

      我认为这行得通,尽管很丑:

      todeg[x_, y_] := If[# < 0, 360 + #, #] &@(N@ArcTan[x, y]/Degree)
      

      【讨论】:

        猜你喜欢
        • 2022-08-22
        • 1970-01-01
        • 2012-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-27
        • 2011-12-06
        • 1970-01-01
        相关资源
        最近更新 更多