首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建R函数求两点间的距离和角度

问创建R函数求两点间的距离和角度
EN

Stack Overflow用户
提问于 2018-01-25 13:28:18
回答 2查看 3.7K关注 0票数 3

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

示例数据集

代码语言:javascript
复制
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))

电流函数

目前,我已经成功地使用Pythagoras开发了远程部分:

代码语言:javascript
复制
distance <- function(from, to){
  D <- sqrt((abs(from[,1]-to[,1])^2) + (abs(from[,2]-to[,2])^2))
  return(D)
}

效果很好:

代码语言:javascript
复制
distance(from = From, to = To)


[1] 2.915476 1.414214 5.099020 1.414214

但我不知道怎么得到角度部分。

到目前为止我尝试过的是:

我尝试过修改this question的第二个解决方案

代码语言:javascript
复制
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)

但我显然是搞砸了

期望输出

我希望将函数的角部分添加到我的第一个函数中,在这个函数中,我可以得到从和数据之间的距离和角度。

EN

Stack Overflow用户

回答已采纳

发布于 2018-01-25 14:04:18

通过两点之间的角度,我假设你是指端点定义的两个向量之间的角度(假设起始点是原点)。

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

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

代码语言:javascript
复制
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

NaNs是由于你有零长度的矢量.

票数 5
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48444003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档