2017-02-16 19 views
0

Я рассмотрел другие вопросы, такие как this, this и this, но все они вычисляют кратчайшее расстояние до отрезка линии, определяемого двумя конечными точками, тогда как у меня нет были способны сделать то же самое, но для линии, определяемой перехватом и наклоном.Расчет кратчайшего расстояния от точки к линии, определяемой перехватом и наклоном в R

Это мои данные, которые я рисую и добавляю строку, которая всегда будет иметь перехват 0 и уклон, определяемый средствами двух переменных.

df <- data.frame(x = seq(1, 10, 1), 
       y = seq(1, 10, 2), 
       id = head(letters, 10)) 

plot(df$x, df$y, 
    abline(a = 0, b = (mean(df$x)/mean(df$y))))  

Я пытаюсь рассчитать кратчайшее расстояние от каждой точки до линии.

+1

Может быть, это может ответить на ваш вопрос: https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line – echasnovski

ответ

1

Проверить эту (Измененный here)

#Perpendicular distance from point 'a' to a line with 'slope' and 'intercept' 
dist_point_line <- function(a, slope, intercept) { 
    b = c(1, intercept+slope) 
    c = c(-intercept/slope,0)  
    v1 <- b - c 
    v2 <- a - b 
    m <- cbind(v1,v2) 
    return(abs(det(m))/sqrt(sum(v1*v1))) 
} 

dist_point_line(c(2,1), 1, 0) 
#[1] 0.7071068 

В вашем случае вы могли бы сделать что-то вроде этого

apply(df, 1, function(x) dist_point_line(as.numeric(x[1:2]), slope = 1, intercept = 0)) 
#[1] 0.0000000 0.7071068 1.4142136 2.1213203 2.8284271 3.5355339 2.8284271 2.1213203 1.4142136 0.7071068 
+1

Кажется, что работает отлично. Спасибо за ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^