【发布时间】: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
我怎样才能从笛卡尔坐标中获得从 0 到 360 的角度:
{1,0} = 0 Degree
{0,1} = 90 Degrees
{-1,0} = 180 Degrees
{0,-1} = 270 Degrees
我很难用 ArcTan 获得 180 到 359 的角度下注...
【问题讨论】:
标签: wolfram-mathematica coordinates
试试:
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?
ArcTan[Sequence @@ x]而不是ArcTan @@ x?
试试这个:
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]}]
【讨论】:
我认为这行得通,尽管很丑:
todeg[x_, y_] := If[# < 0, 360 + #, #] &@(N@ArcTan[x, y]/Degree)
【讨论】: