AnswerBun.com

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

Stack Overflow en español Asked by rral on December 1, 2020

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.

One Answer

Se me escapa un poco la forma en que lo estás resolviendo. En sí, para calcular los puntos y por cada x y poder completar los puntos de la recta que unen a y b, solo necesitamos averiguar la pendiente, que en este caso sería:

a <- c(25, 6) 
b <- c(20, 10)

# diff(y)/diff(x)
(a[1]-b[1]) / (a[2] - b[2])
-1.25

Con la pendiente, podemos ir generando valores para x, según la resolución k y obtendremos los puntos y. Como se trata de una cuadrícula, los valores de y deberían ser discretos, por lo que podríamos redondearlos:

completa <- function(a, b, k) {
  
  x <- y <- numeric(0)
  
  resta <- b - a
  pendiente <- resta[1]/resta[2]
  u_ba <- c(pendiente, 1)
  
  for (i in seq(0, resta[2], k)) {
    posi <- a + (i * u_ba)
    x <- round(c(x, posi[1]),0)
    y <- round(c(y, posi[2]),0)
  }
  cbind(x, y)
}

Como verá, el ciclo ha cambiado ya que se va haciendo de x1 a x2 y con la pendiente calculamos el valor de y, también agregamos un redondeo a cada eje.

Ejemplo, con k = 0.8 llegamos a una solución bastante óptima:

a <- c(25, 6) 
b <- c(20, 10)

completa(a, b, .8)

      x  y
[1,] 25  6
[2,] 24  7
[3,] 23  8
[4,] 22  8
[5,] 21  9
[6,] 20 10

Answered by Patricio Moracho on December 1, 2020

Add your own answers!

Related Questions

Cuándo tipar en typescript y cuándo no?

1  Asked on January 31, 2021 by air

 

Dudas con la integración de pasarela de pago

0  Asked on January 30, 2021 by beat-garrido

       

Error spring mvc y tomcat

1  Asked on January 30, 2021 by daniel2017

       

Fragment que cambia solo

0  Asked on January 30, 2021 by slock-mr

   

Sorting in list

1  Asked on January 29, 2021 by user182700

   

Insertar variables PHP en SQL a mi base de datos

2  Asked on January 28, 2021 by adiel

     

Web scraping profundo en R, producto por producto

1  Asked on January 28, 2021 by javi-jerez

     

Error Invalid shorthand property initializer

1  Asked on January 28, 2021 by cristian-saavedra

   

consulta json php con resultados duplicados

1  Asked on January 27, 2021 by mono101

       

poner un borde a todos las regiones de un mapa d3.js

1  Asked on January 27, 2021 by user5115790

 

Intento insertar registros con AJAX en php

1  Asked on January 25, 2021 by sergio-martinez

   

¿Porqué se me genera un doble foco en la ventana?

1  Asked on January 25, 2021 by cesar-andi

       

Problema con tabla dinamica en react

1  Asked on January 24, 2021 by javier-richards

     

Problemas al ejecutar Procedimiento almacenado dentro de un loop

1  Asked on January 24, 2021 by jhon-alexander-jimenez-morales

       

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir