matrices – Unir dos coordenadas de una matriz usando distancia mínima con R


Estoy trabajando en un proceso de completación (no estoy seguro si es el término correcto) de una matriz basada en dos coordenadas de preferencia considerando la distancia mínima, me explico.

Tengo una matriz de nxm (filas y columnas), de valores NA y 1 ver figura 1:

introducir la descripción de la imagen aquí

El objetivo es:

  1. Encuentre los puntos extremos de los elementos contiguos que están unidos por una distancia igual a 1 (adyacente en la horizontal y vertical) o 1.4142 (adyacente en la diagonal). Las coordenadas extremas en el ejemplo están representadas por los rectángulos de la figura 1.

  2. Después de ubicar las coordenadas extremas de los grupos que tengas las distancias indicadas en el punto uno, se requiere completar las coordenadas que permita unir los dos extremos “de preferencia” considerar la distancia mínima entre los dos puntos. (ver líneas en la figura 1)

Suponiendo que encuentro las coordenadas extremas (a y b, ver figura 2), estoy tratando de usar la ecuación vectorial de una línea:

introducir la descripción de la imagen aquí

completa <- function(a, b, k){
  x <- y <- NULL
  resta <- b - a
  u_ba <- resta / sqrt(sum(resta^2))
  for (i in seq(0, 1, k)) {
    posi <- a + i * u_ba
    x <- c(x, posi(1))
    y <- c(y, posi(2))
  }
  coordenadas  <- cbind(x, y)
  return(coordenadas)
}

La matriz de ejemplo está en:

data_mat <- read.csv ("https://www.dropbox.com/s/hz42scjuf9uib9y/data_test.csv?dl=1")

considerando como ejemplo las coordenadas a y b
a <- c (25, 6)
b <- c (20, 10)

Al utilizar la función con las coordenadas con k = 0.5 (el valor de k puede variar entre 0 y 1), se obtiene lo siguiente:

completa (a, b, 0.5)
# x y
# (1,) 25 6
# (2,) 25 6
# (3,) 24 7

pero el resultado esperado es:

# x y
# (1,) 25 6
# (2,) 24 7
# (3,) 23 8
# (4,) 22 9
# (5,) 21 10 # o 21 9,
# (6,) 20 10

Es evidente que existe más de una solución para la línea, por lo que comentar que se puede considerar de preferencia la distancia mínima.

Finalmente, luego de tener estas coordenadas, solo bastaría con asignarles un valor igual a uno. La idea principal es hacer que este proceso sea recursivo. Y que al final se pueden unir todas las coordenadas de la matriz.

Por favor, cualquier sugerencia es bienvenida, gracias.