【问题标题】:Finding X, Y coordinates on a curved line using Euclidean distance in R使用R中的欧几里得距离在曲线上查找X,Y坐标
【发布时间】:2021-01-03 02:15:34
【问题描述】:

根据我阅读的一项研究,我正在尝试根据欧几里得距离从曲线中提取三个点。从曲线的最左边开始,我想在起点(我已经可以做到)、中点和直线的三分之二处提取 X、Y 值。但是,我不知道如何使用欧几里得距离来找到相应的 X 和 Y 值,并且我希望复制的研究谁的方法没有概述这是如何完成的,所以希望你们好人能够提供帮助.

如果我的数据看起来有点像这样(真实数据每行包含 21 个 X 和 21 个 Y 值):

df <- data.frame(x = c(-4, -3, -2, -1, 0, 1, 2, 3, 4), y = c(1.5, 1.5, 1.5, 1.25, 0.8, 0, -1.2, -2.8, -4))

这在视觉上看起来像:

plot(df)
lines(df)

欧式距离为:

根据 Roland 和 Bertil 的反馈更新

cumsum(diag(as.matrix(dist(cbind(df$x, df$y), method = "euclidean"))[-1,]))

[1]  1.000000  2.000000  3.030776  4.127362  5.407987  6.970037  8.856833 10.418883

如何提取直线中途和直线中 75% 的点?

非常感谢任何和所有帮助。

【问题讨论】:

  • 你想要dist(cbind(df$x, df$y), method = "euclidean"),或者,因为你只需要第一列,with(df, sqrt((x- x[[1]])^2 + (y - y[[1]])^2))。但是,您确定相关点不仅仅由 x 值定义吗?或者应该使用欧几里得距离而不是曲线上的距离(那么cumsum(diag(as.matrix(dist(cbind(df$x, df$y), method = "euclidean"))[-1,])) 可能有用)?
  • @Roland,感谢您的回复。我正在查看的论文将曲线的长度计算为连续的 x,y 坐标对之间的欧几里得距离之和。然后他们在曲线上的三个点提取 x,y 值。不幸的是,x,y 值的提取似乎不仅仅基于 x 值。
  • 哦,我明白了,我的错,这是非常错误的^^我将删除它,因为它根本没有用,非常感谢您非常尊重的评论!
  • @Paul 这种事情很容易做到。别担心。

标签: r curve euclidean-distance


【解决方案1】:

首先我们计算所有品脱之间的距离并保存为矩阵

dist_m <- dist(df) %>% 
  as.matrix()

然后我们可以通过提取下对角线[(2,1), (3,2),...]和cummaltive求和得到累积距离

dist_m[2:nrow(dist_m), 1:(nrow(dist_m)-1)] %>% 
 diag() %>% 
 cumsum()

剩下的应该很简单

【讨论】:

  • 感谢您的回答。它很有用,与罗兰之前的回应一致。我只是想跟进你说应该直截了当的部分(这不是我真正的领域,我很简单,所以我不敢说这对我来说不是那么直截了当)。例如,我认为要提取中点 x,y 坐标,我应该将值取为累计总数的一半(10.418883/2 = 5.209441)。在此之后,我应该查找最接近该值的 x,y 坐标——在我的示例中是第 6 组 x,y 值。这是接近还是我离得很远?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 2013-03-02
  • 2020-11-28
  • 2017-01-07
相关资源
最近更新 更多