R 在与一组点正交的直线上找到最近的点?

R 在与一组点正交的直线上找到最近的点?,r,distance,R,Distance,假设我有一条直线和一组点(红色): 我需要这组点与直线正交的最短距离?我知道如何计算一个点与直线上最近点之间的距离(例如光栅::点距离),但如何确保它是正交的。有没有办法用R来计算呢?我相信这是数学理解的问题。如果到直线的距离最短,则此距离必须是点与直线正交的直线之间的直线长度 正交线的长度必须与点与线之间的最短欧氏距离相同。这个问题可以简化为二维问题 在2d的情况下,如果AB线与直线不正交,那么我们可以在a点、B点和C点之间构造一个直角三角形,其中a点是外点,B点是AB线与D点相交的地方,C点

假设我有一条直线和一组点(红色):


我需要这组点与直线正交的最短距离?我知道如何计算一个点与直线上最近点之间的距离(例如光栅::点距离),但如何确保它是正交的。有没有办法用R来计算呢?

我相信这是数学理解的问题。如果到直线的距离最短,则此距离必须是点与直线正交的直线之间的直线长度

正交线的长度必须与点与线之间的最短欧氏距离相同。这个问题可以简化为二维问题

在2d的情况下,如果AB线与直线不正交,那么我们可以在a点、B点和C点之间构造一个直角三角形,其中a点是外点,B点是AB线与D点相交的地方,C点是直角三角形中最后一个点的形状,沿D点。AC是与D正交的直线。AB点是三角形的斜边。因此: 长度(AC)^{2}+长度(BC)^{2}=长度(AB)^{2} 因此: 长度(AC)^{2}<长度(AB)^{2}和长度(AC)<长度(AB),因为我们必须取长度为正。因此,除非直线与原始直线正交/垂直,否则距离总是较短

你可以看看:


请让我知道,如果我犯了错误,我会很高兴更新此信息。

我认为这是数学理解方面的问题。如果到直线的距离最短,则此距离必须是点与直线正交的直线之间的直线长度

正交线的长度必须与点与线之间的最短欧氏距离相同。这个问题可以简化为二维问题

在2d的情况下,如果AB线与直线不正交,那么我们可以在a点、B点和C点之间构造一个直角三角形,其中a点是外点,B点是AB线与D点相交的地方,C点是直角三角形中最后一个点的形状,沿D点。AC是与D正交的直线。AB点是三角形的斜边。因此: 长度(AC)^{2}+长度(BC)^{2}=长度(AB)^{2} 因此: 长度(AC)^{2}<长度(AB)^{2}和长度(AC)<长度(AB),因为我们必须取长度为正。因此,除非直线与原始直线正交/垂直,否则距离总是较短

你可以看看:


如果我犯了错误,请告诉我,我很乐意更新此信息。

鉴于您参考的是
光栅::点距离
,我假设您参考的是地理空间数据。下面显示了如何检查距离是到直线,还是像您担心的那样,到定义(多边形)直线(严格来说不是数学意义上的直线)的最近顶点

图书馆(terra)

pnts鉴于您参考的是
光栅::点距离
我假设您参考的是地理空间数据。下面显示了如何检查距离是到直线,还是像您担心的那样,到定义(多边形)直线(严格来说不是数学意义上的直线)的最近顶点

图书馆(terra)

pnts你不能。
pointDistance
函数计算两组点之间的差异。您需要一个函数来计算从点到由两点或坡度和截距定义的直线的距离。听着,或者,你不能。
pointDistance
函数计算两组点之间的差异。您需要一个函数来计算从点到由两点或坡度和截距定义的直线的距离。看,或者。
library(terra)
pnts <- cbind(seq(1000,10000,1000), seq(1000,10000,1000))
crs <- "+proj=utm +zone=1 +datum=WGS84"
# 8 points
p <- vect(pnts[2:9, ], crs=crs)
 
# line defined by 2 vertices
line <- pnts[c(1,10), ]
line[,1] = line[,1]-500
line[,2] = line[,2]+500
x <- vect(line, type="lines", crs=crs)

plot(x)
points(x)
points(p, col="red")

distance(p, x)
#         [,1]
#[1,] 707.1068
#[2,] 707.1068
#[3,] 707.1068
#[4,] 707.1068
#[5,] 707.1068
#[6,] 707.1068
#[7,] 707.1068
#[8,] 707.1068

sqrt(2*500^2)
#[1] 707.1068
n <- nearest(p, x)
lines(p, n)