r - 以最小距离连接矩阵的两个坐标

标签 r matrix interpolation igraph

我正在基于两个考虑最小距离的坐标完成矩阵的完成过程(我不确定正确的术语)。
我有一个nxm(行和列),NA值和1的矩阵,见图1:
enter image description here
目标是:

  • 查找以1(在水平和垂直方向上相邻)或1.4142(在对角线上相邻)的距离连接的连续元素的端点。示例中的极端坐标由图中的矩形表示。
  • 找到极端坐标后,需要完成“最好”描述两点之间最小距离的坐标。 (由图1中的行表示)

  • 假设我找到了极限坐标( a b 见图2),我试图使用直线的矢量方程:
    enter image description here
    因此,我正在尝试创建一个使用极值(a和b)和常数k的函数(请参见图2)
    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  <- round(cbind(x, y))
      return(coordenadas)
    }
    
    示例矩阵位于:
    data_mat <- read.csv("https://www.dropbox.com/s/hz42scjuf9uib9y/data_test.csv?dl=1")
    a <- c(25, 6)
    b <- c(20, 10)
    
    当使用坐标为a,b和k = 0.5(k的值可以在0和1之间变化)的函数时,将获得以下结果:
    completa(a,b,0.5)
    #      x y
    #[1,] 25 6
    #[2,] 25 6
    #[3,] 24 7
    
    但预期的输出是:
    #      x y
    #[1,] 25 6
    #[2,] 24 7
    #[3,] 23 8
    #[4,] 22 9
    #[5,] 21 10 # or 21 9,  
    #[6,] 20 10
    
    显然,该线有多个解决方案,因此建议最好考虑最小距离。
    最后,在拥有这些坐标之后,仅给它们分配一个等于1的值就足够了。主要思想是使此过程递归。最后,矩阵的所有坐标都可以连接。
    请任何建议都值得欢迎,谢谢。

    最佳答案

    据我所知,您已经提出了数学上的问题。当我理解正确时,您想“击中”极端坐标之间的正方形,以在2个簇之间建立桥梁。您所犯的错误是在您的for循环中。您在循环的末尾仅添加了ab的单位矢量的1倍,因此您在网格中仅行进了1的距离。
    我已经以这种方式更正了您的代码,它可以传播整个距离。我希望它能解决您的问题:

    completa <- function(a, b, k){
      if(k!=0){
        x <- y <- NULL
        resta <- b - a
        vector_length = sqrt(sum(resta^2))        
        for (i in seq(0, 1, length.out=(vector_length/k))) {
          posi <- a + i * resta
          x <- c(x, posi[1])
          y <- c(y, posi[2])
        }
        coordenadas  <- round(cbind(x, y))
        coordenadas <- unique(coordenadas[,1:2])
      }
    if(k==0) coordenadas = a
    return(coordenadas)
    }
    
    结果是
     > completa(a,b,0.5)
             x  y
       [1,] 25  6
       [2,] 24  7
       [3,] 23  7
       [4,] 23  8
       [5,] 22  8
       [6,] 22  9
       [7,] 21  9
       [8,] 20 10
    

    关于r - 以最小距离连接矩阵的两个坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63897645/

    相关文章:

    python - 对 NumPy 数组进行上采样和插值

    r - 动态改变ggplot2的背景颜色

    r - 从标记数据创建带有标签的列

    Matlab:在 ode45 中使用 interp2

    Android - 当 activity.setContentView 完成渲染时是否触发了任何事件?

    python - 用插值填充多索引 Pandas DataFrame

    r - 提取重复字符

    r - 如何将函数中新创建的变量引用到辅助函数?

    c++ - 将相机变换应用于 OpenGL

    c - C 中的二维插值