我使用以下代码创建一个带有随机 rho 和 theta 的点:
set.seed(1)
rho <- sqrt(runif(1, 0.0, 1.0))
theta <- runif(1, 0, 2*pi)
获取rho=0.515
和theta=2.338
我可以使用 -0.358
和 x=rho*cos(theta)
和 y=rho*sin(theta)
获取 x 和 y 值0.371
分别
但是,如果我执行相反的过程
r<-sqrt(x^2+y^2)
其结果与 rho 相同,但执行
a<-atan(y/x)
我得到的结果与 theta 不同。
你能告诉我我做错了什么吗?
最佳答案
您有x < 0
和y/x = -1.036811 < 0
。现在,这意味着 theta 只能位于第二或第四象限。
让tan(-z)=-tan(z)=tan(2*pi-z)=tan(pi-z)=w
,然后-z
, pi-z
, 2*pi-z
全部等于atan(w)
,解在 z
中并不唯一.
atan(y/x)
#[1] -0.8034692
-0.8034692是解决办法
pi+atan(y/x)
#[1] 2.338123
和
2*pi+atan(y/x)
#[1] 5.479716
也是解决方案。
c(tan(atan(y/x)), tan(pi+atan(y/x)), tan(2*pi+atan(y/x)))
# [1] -1.036811 -1.036811 -1.036811
如果我们有兴趣寻找解决方案0<theta<pi
那么唯一的候选解是pi+atan(y/x)=2.338123
关于r - 将 x 和 y 转换为以弧度为单位的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42540092/