当前位置: 首页 > 知识库问答 >
问题:

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

景建业
2023-03-14

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

问题:

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

我很乐意做无融资创业,但我被困在了第一步,那就是将我的笛卡尔纬度/长坐标转换为极坐标(跳跃大小和转弯角度)。我知道在Matlab等其他程序中有内置的函数可以做到这一点,但我找不到任何方法在R中做到这一点。我可以在for循环中手动完成,但如果有一个包或任何更简单的方法,我更喜欢这样做。

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

我没有发布任何示例数据,因为它只是lat和long坐标的两列数据帧。

感谢您提供的任何帮助!如果这个网站或其他网站上有我错过的简单解释,请告诉我那个方向!我什么都找不到。

干杯

共有3个答案

阎嘉荣
2023-03-14

我认为您可以通过以下方式在catesian和polar之间进行转换:

polar2cart <- function(r, theta) {
  data.frame(x = r * cos(theta), y = r * sin(theta))
}

cart2polar <- function(x, y) {
  data.frame(r = sqrt(x^2 + y^2), theta = atan2(y, x))
}
崔绍辉
2023-03-14

因为它非常简单,所以您可以编写自己的函数。类似于R中的Matlab函数:

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

  c(r,t)
}
柯奕
2023-03-14

对于相同单位的x-y坐标(例如米,而不是纬度和经度),可以使用此函数获取数据。跳跃尺寸和转弯角度的框架(以度为单位)。

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)
 类似资料:
  • 我试图将图像从极坐标转换为笛卡尔坐标,但在应用公式后,我得到了浮点坐标(r和teta),我不知道如何使用x和y的浮点来表示空间中的点。可能有一种方法可以将它们转换为整数,并仍然保留分布,但我不知道如何。我知道OpenCV中有像warpPolar这样的函数,但我想自己实现它。任何想法都会有帮助:) 这是我的代码:

  • 我正在尝试将球坐标转换为笛卡尔坐标,以绘制一个简单的三维金字塔。 下面是获取金字塔四个主要角的代码,具体取决于极角yrad和方位角xrad以及顶点坐标x和y: 方位角轴似乎工作正常,但问题是,在操纵极轴角时,当它们越过天顶或底部时,左右会互换,如图所示(选择顶部的mp4以更平滑地播放):http://gyazo.com/4a245713c232893960863cf4ea4186f6 怎么了?

  • 我想知道是否有人帮助我理解如何将顶部图像转换为底部图像。以下链接中提供了这些图像。顶部图像采用笛卡尔坐标。底部图像是极坐标中的转换图像

  • 我正在尝试将极坐标的图像转换为笛卡尔坐标。 将图像转换为极坐标的示例显式执行-想要一个光滑的矩阵方法 我原以为使用上述方法是小菜一碟,但事实并非如此!!如果有人发现我的代码有错误,请告诉我! 我发现非常奇怪的是,当我改变phi时,它会做出根本性的改变,而不是以我期望的方式! 干杯

  • 我知道这个问题已经被回答了很多次,但是我不知道我做的是好是坏。 我得到了一个带有缺陷位置和图像ID的文件。图像大小为96*96。起源是(48,48) 由此计算R和T 然后,我为每个图像创建大小为96×96的空矩阵,对于图像1(例如),我在每个坐标(R,T)处赋值0 当我绘制矩阵时,我的结果很奇怪。。我错过了什么重要的事情吗?

  • 我试图对下面的第一幅图像进行极坐标变换,最后得到第二幅。然而,我的结果是第三张图片。我有一种感觉,这与我选择的“原产地”有关,但我不确定。