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坐标的两列数据框.
感谢您的任何帮助,您可以提供!如果在本网站的某个地方或我错过的其他地方有一个简单的解释,请指出我的方向!我找不到任何东西.
干杯
对于具有相同单位的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)

由于它相当简单,您可以编写自己的函数。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)