如何计算数据框中两个连续点之间的距离和角度?
How to calculate distance and angle between two consecutive points in data frame?
我有R的数据框:
my_data_points <- data.frame(x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
y = c(10, 9, 8, 7, 6, 6, 7, 8, 9, 10))
如何计算两个连续点之间的欧氏距离和角度
p1(1, 10) 和 p2(2, 9), p2(2, 9) 和 p3(3, 8) 等?
例如我可以使用这个函数来计算距离:
dist_func <- function(x1, x2, y1, y2) {
sqrt((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
}
但它使用来自两个不同行的数据。如何实现?
使用已经定义的 dist
函数,默认情况下计算欧氏距离矩阵,并使用 atan2
得到两点之间的角度,我们可以得到以下结果:
as.matrix(dist(my_data_points)) -> mat
c(mat[row(mat) == col(mat) + 1], NA) -> my_data_points$dists
my_data_points %>% mutate(angle = c(atan2(diff(x),diff(y)), NA) * 180/pi)
x y dists angle
1 1 10 1.414214 135
2 2 9 1.414214 135
3 3 8 1.414214 135
4 4 7 1.414214 135
5 5 6 1.000000 90
6 6 6 1.414214 45
7 7 7 1.414214 45
8 8 8 1.414214 45
9 9 9 1.414214 45
10 10 10 NA NA
我们可以使用 lag
来自 dplyr
library(dplyr)
my_data_points %>%
mutate(out = dist_func(x, lag(x), y, lag(y)))
我有R的数据框:
my_data_points <- data.frame(x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
y = c(10, 9, 8, 7, 6, 6, 7, 8, 9, 10))
如何计算两个连续点之间的欧氏距离和角度 p1(1, 10) 和 p2(2, 9), p2(2, 9) 和 p3(3, 8) 等?
例如我可以使用这个函数来计算距离:
dist_func <- function(x1, x2, y1, y2) {
sqrt((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
}
但它使用来自两个不同行的数据。如何实现?
使用已经定义的 dist
函数,默认情况下计算欧氏距离矩阵,并使用 atan2
得到两点之间的角度,我们可以得到以下结果:
as.matrix(dist(my_data_points)) -> mat
c(mat[row(mat) == col(mat) + 1], NA) -> my_data_points$dists
my_data_points %>% mutate(angle = c(atan2(diff(x),diff(y)), NA) * 180/pi)
x y dists angle
1 1 10 1.414214 135
2 2 9 1.414214 135
3 3 8 1.414214 135
4 4 7 1.414214 135
5 5 6 1.000000 90
6 6 6 1.414214 45
7 7 7 1.414214 45
8 8 8 1.414214 45
9 9 9 1.414214 45
10 10 10 NA NA
我们可以使用 lag
来自 dplyr
library(dplyr)
my_data_points %>%
mutate(out = dist_func(x, lag(x), y, lag(y)))