我有两点,(x1,y1)和(x2,y2),我想在两者之间划一条线。我知道我可以用arctangent和斜率计算出这条线的角度(以度为单位):
atan((y2-y1)/(x2-x1))*180/pi然而,我如何将这个角度转换为0,360度?基本上,我希望我的角度在指南针上,“北”是0度,“东”是90度,“南”是180度,“西”是270度。
谢谢!
发布于 2015-08-05 19:18:18
为了概括一下@bgoldst的回答:
(A1 - atan2(y2-y1,x2-x1) * 180/pi ) %%360下面是对这个方程的各个部分的解释:
atan2()而不是atan()。
atan2()是带有两个参数的arctangent函数。使用两个参数的目的是收集有关输入符号的信息,以便返回计算角度的适当象限。这对于单参数arctangent (atan)函数是不可能的。%%给出将角度除以360的剩余部分。以这种方式,我们强迫角度“包围”在360。atan2计算的角度乘以180/pi,以将弧度(atan2 2的默认输出)的答案转换为度。A1 = 90。
(90 - atan2(y2-y1,x2-x1) * 180/pi )%360发布于 2015-08-05 17:48:19
(450-atan2(y2-y1,x2-x1)*180/pi)%%360segmentToAngle <- function(x1,y1,x2,y2) atan2(y2-y1,x2-x1)*180/pi;
segmentToAngle(0,0,1,0); ## east
## [1] 0
segmentToAngle(0,0,0,1); ## north
## [1] 90
segmentToAngle(0,0,-1,0); ## west
## [1] 180
segmentToAngle(0,0,0,-1); ## south
## [1] -90
segmentToCompassAngle <- function(x1,y1,x2,y2) (450-segmentToAngle(x1,y1,x2,y2))%%360;
segmentToCompassAngle(0,0,1,0); ## east
## [1] 90
segmentToCompassAngle(0,0,0,1); ## north
## [1] 0
segmentToCompassAngle(0,0,-1,0); ## west
## [1] 270
segmentToCompassAngle(0,0,0,-1); ## south
## [1] 180发布于 2018-12-31 22:35:33
为“北”0度。“东”90度“南方”180度。和“西”270度。
您可以使用公式:
f(E,N)=180-90*(1+sign(N))* (1-符号(E)^2)-45*(2+sign(N))*符号(E)
-180/pi()*sign(E*N)*atan((abs(N)-abs(E))/(abs(N)+abs(E)))
E=E2-E1 and N=N2-N1https://stackoverflow.com/questions/31838855
复制相似问题