От координаты до степени - PullRequest
       29

От координаты до степени

3 голосов
/ 20 ноября 2011

Как я могу получить угол в градусах от 0 до 360 от декартовой координаты так, чтобы:

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

Мне было трудно с ArcTan получить угловую ставку от 180 до 359 ...

Ответы [ 3 ]

3 голосов
/ 20 ноября 2011

Попробуйте:

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]}]

enter image description here

3 голосов
/ 20 ноября 2011

Попробуйте:

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 &
2 голосов
/ 20 ноября 2011

Я думаю, что это работает, несмотря на то, что уродливо:

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