gpt4 book ai didi

r - 创建R函数来查找两点之间的距离和角度

转载 作者:行者123 更新时间:2023-12-02 08:09:41 25 4
gpt4 key购买 nike

我正在尝试创建或找到一个计算两点之间距离和角度的函数,我的想法是我可以有两个带有 x、y 坐标的 data.frames,如下所示:

示例数据集

From <- data.frame(x = c(0.5,1, 4, 0), y = c(1.5,1, 1, 0))

To <- data.frame(x =c(3, 0, 5, 1), y =c(3, 0, 6, 1))

当前函数

目前,我已经设法使用毕达哥拉斯开发了距离部分:

distance <- function(from, to){
D <- sqrt((abs(from[,1]-to[,1])^2) + (abs(from[,2]-to[,2])^2))
return(D)
}

效果很好:

distance(from = From, to = To)


[1] 2.915476 1.414214 5.099020 1.414214

但我不知道如何获得角度部分。

到目前为止我尝试了什么:

我尝试调整 this question 的第二种解决方案

angle <- function(x,y){
dot.prod <- x%*%y
norm.x <- norm(x,type="2")
norm.y <- norm(y,type="2")
theta <- acos(dot.prod / (norm.x * norm.y))
as.numeric(theta)
}

x <- as.matrix(c(From[,1],To[,1]))
y <- as.matrix(c(From[,2],To[,2]))
angle(t(x),y)

但我显然把它弄得一团糟

期望的输出

我想将函数的角度部分添加到我的第一个函数中,在这里我可以同时获得 from 和 to 数据帧之间的距离和角度

最佳答案

通过两点之间的角度,我假设您的意思是两个向量之间的角度由端点定义(并假设起点是起点)。

您使用的示例仅围绕一对点设计,transpose 仅​​用于此原则。然而,它足够强大,可以在超过 2 个维度上工作。

你的函数应该像你的距离函数一样被向量化,因为它需要多对点(我们只考虑二维点)。

angle <- function(from,to){
dot.prods <- from$x*to$x + from$y*to$y
norms.x <- distance(from = `[<-`(from,,,0), to = from)
norms.y <- distance(from = `[<-`(to,,,0), to = to)
thetas <- acos(dot.prods / (norms.x * norms.y))
as.numeric(thetas)
}

angle(from=From,to=To)
[1] 0.4636476 NaN 0.6310794 NaN

NaN 是由于您的向量长度为​​零。

关于r - 创建R函数来查找两点之间的距离和角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48444003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com