R:将笛卡尔坐标转换为极坐标,然后计算距离原点的距离

ste*_*rt6 6 simulation r coordinates polar-coordinates cartesian-coordinates

我一直在寻找一种解决方案,将我所拥有的笛卡尔坐标(lat,long)转换为极坐标,以便于我想要运行的模拟,但是我没有在这里找到任何问题或答案. R.有很多选项,包括Matlab中的内置函数cart2pol,但我的所有数据都在R中,我想继续在这个框架中工作.

题:

我有来自标记数据的lat/long坐标,我想将它们转换为极坐标(意思是跳跃大小和角度:http://en.wikipedia.org/wiki/Polar_coordinate_system),这样我就可以随机播放或引导它们(没有决定哪个)约1000次,并计算每个模拟轨道从起点的直线距离.我有一个真正的轨道,我有兴趣通过模拟具有相同跳跃大小和转向角度的1,000个随机轨道来确定这种动物是否表现出场地亲和力,但是在完全不同的顺序和组合中.因此,我需要距离原点1000个直线距离来创建距离分布,然后将其与我的真实数据集的直线距离进行比较.

我很自在地进行自举,但是我在第一步停留,即将我的笛卡尔纬度/长坐标转换为极坐标(跳跃大小和转弯角度).我知道在Matlab等其他程序中有内置函数可以做到这一点,但我找不到任何方法在R中做到这一点.我可以手动在for循环中手动完成,但是如果有一个包出来的话有更简单的方法,我更喜欢这样做.

理想情况下,我想将数据转换为极坐标,运行模拟,然后为每个随机轨道输出一个终点作为笛卡尔坐标,lat/long,这样我就可以计算出行的直线距离.

我没有发布任何样本数据,因为它只是一个lat和long坐标的两列数据框.

感谢您的任何帮助,您可以提供!如果在本网站的某个地方或我错过的其他地方有一个简单的解释,请指出我的方向!我找不到任何东西.

干杯

Jos*_*ien 7

对于具有相同单位的xy坐标(例如,米而不是纬度和经度),您可以使用此函数获取跳跃大小和转角(以度为单位)的数据框.

getSteps <- function(x,y) {
    d <- diff(complex(real = x, imaginary = y))
    data.frame(size = Mod(d), 
               angle = c(NA, diff(Arg(d)) %% (2*pi)) * 360/(2*pi))
}

## Try it out   
set.seed(1)
x <- rnorm(10)
y <- rnorm(10)
getSteps(x, y)
#        size     angle
# 1 1.3838360        NA
# 2 1.4356900 278.93771
# 3 2.9066189 101.98625
# 4 3.5714584 144.00231
# 5 1.6404354 114.73369
# 6 1.3082132 135.76778
# 7 0.9922699  74.09479
# 8 0.2036045 141.67541
# 9 0.9100189 337.43632

## A plot helps check that this works
plot(x, y, type = "n", asp = 1)
text(x, y, labels = 1:10)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Nis*_*nth 2

由于它相当简单,您可以编写自己的函数。cart2polR 中类似 Matlab 的函数:

cart2pol <- function(x, y)
{
  r <- sqrt(x^2 + y^2)
  t <- atan(y/x)

  c(r,t)
}
Run Code Online (Sandbox Code Playgroud)

  • 这不考虑 90 度到 270 度之间的角度(您的代码会出现错误) (2认同)