我用随机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
我可以分别使用x=rho*cos(theta)
和y=rho*sin(theta)
获取-0.358
和0.371
的x和y值
但是,如果我正在进行逆程序
r<-sqrt(x^2+y^2)
其结果与rho相同但正在进行
a<-atan(y/x)
我获得的结果与theta不同。
你能说出我做错了什么吗?
答案 0 :(得分:2)
您有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
答案 1 :(得分:1)