求圆上一点的角

问题描述 投票:0回答:1

我给定(x,y)点并知道半径。我想求出圆上各点的角度。将来我想用这段代码来测试角是否均匀分布在[0,2Pi]这个区间上。

我试过的代码是

b <- matrix(c(d[,2],d[,5]),ncol=2)
S <- (b/sqrt((rowSums(b^2))))
#S <- matrix(S[!is.na(S)],ncol=2)
lim <- c(-1,1)
plot(S,xlim=lim,ylim=lim,xlab=expression(S1),ylab=expression(S2))
#S<-S[!is.na(S)]
U <- matrix(c(0),nrow=nrow(S),ncol=1)
for (i in 1:nrow(S)) {
    U[i,1] <- (atan(abs(S[i,1]/S[i,2])))
}

那段代码给了我一些角度,但没有一个在[270,360]这个区间内。

points on circle

r geometry point angle
1个回答
3
投票

嗨,如果你能给一些简单的数据样本,这将是非常有帮助的。

然而,我最初可以看到一些问题与使用的 atan().

  1. atan 需要一个单一的参数,并返回一个弧度而非度数的角度,结果含糊不清,因为你不知道数值在哪个象限。
  2. atan 结果是含糊不清的,因为你不知道这些值在哪个象限。例如,没有办法区分一个负的 x 值是因为我们在第二或第四象限。

要解决这个问题,你可以使用 atan2() 它需要两个参数,从而消除了歧义。见此. 对于intance。

只用 atan 你可以看到这个问题(我这里是换算成度数)

atan(1/1) * 180/pi # first quadrant
# 45
atan(1/-1) * 180/pi # second quadrant
# -45
atan(-1/-1) * 180/pi # third quadrant
# 45
atan(-1/1) * 180/pi # fourth quadrant
# -45

正如你所看到的,你只在以下方面得到结果 [-90,90] ( [-pi/2, pi/2] ).

但使用 atan2()

atan2(y = 1, x = 1) * 180/pi # first quadrant
# 45
atan2(y = 1, x = -1) * 180/pi # second quadrant
# 135
atan2(y = -1, x = -1) * 180/pi # third quadrant
# -135 same as 225 (360-135)
atan2(y = -1, x = 1) * 180/pi # fourth quadrant
# -45 same as 315 (360-45)

正如您所看到的,现在您可以使用以下方法消除您的值属于哪个象限的歧义 atan2.

© www.soinside.com 2019 - 2024. All rights reserved.