首页 > 解决方案 > 如何创建坐标矩阵以及如何计算距离 b/w 坐标

问题描述

我想为任何输入创建一个如下所示的矩阵,并假设输入是"4".

a1 =  (-10.0)   (0,0)   (10,0)   (20,0)
     (-10,5)   (0,5)   (10,5)   (20,5)
     (-10,10)  (0,10)  (10,10)  (20,10)
     (-10,15)  (0,15)  (10,15)  (20,15)

但我不知道该怎么做,而且我想计算单个元素的距离,比如 (0,0) 与其余元素的距离?

编辑:

原点的位置(0,0)可以这样改变:

a2= (-20.0)   (-10,0)   (0,0)   (10,0)
     (-20,5)   (-10,5)   (0,5)   (10,5)
     (-20,10)  (-10,10)  (0,10)  (10,10)
     (-20,15)  (-10,15)  (0,15)  (10,15) 

下一个矩阵将是

a3= (-30.0)   (-20,0)   (10,0)   (0,0)
     (-30,5)   (-20,5)   (10,5)   (0,5)
     (-30,10)  (-20,10)  (10,10)  (0,10)
     (-30,15)  (-20,15)  (10,15)  (0,15) 

a4= (0,-5)  (10,-5)  (20,-5)  (30,-5)
     (0,0)   (10,0)   (20,0)   (30,0)
     (0,5)   (10,5)   (20,5)   (30,5)
     (0,10)  (10,10)  (20,10)  (30,10)

接着

a5= (-10,-5)  (0,-5)  (10,-5)  (20,-5)
     (-10,0)   (0,0)   (10,0)   (20,0)
     (-10,5)   (0,5)   (10,5)   (20,5)
     (-10,10)  (0,10)  (10,10)  (20,10) 

和 a6、a7 等等.....我将不得不通过改变元素的位置来对所有元素执行相同的(0,0)操作,如上所述。

标签: matlab

解决方案


要根据大小n、原点的 x 和 y 位置(0,0)以及 x 和 y 步长生成数组,您可以使用如下函数:

function a = generate_array(n,x0_pos,y0_pos,x_step,y_step)

    a1 = linspace(0 - (x0_pos - 1) * x_step, (n - x0_pos) * x_step, n);
    a2 = linspace(0 - (y0_pos - 1) * y_step, (n - y0_pos) * y_step, n);

    for i = 1:n
        for j= 1:n
            a{i,j} = [a1(i), a2(j)];
        end
    end

end

请注意,由于您使用的是较旧的 Matlab 版本,因此该函数需要位于名为generate_array.m.

现在您需要一个函数来计算从任意点到其中一个单元阵列中的所有点的欧几里得距离。例如,此函数可能如下所示:

function dist = calc_distance(arr,x,y)
    n = size(arr,1);
    for i = 1:n
        for j= 1:n
            dist{i,j} = norm(arr{i,j} - [x, y]);
        end
    end
end

再次确保将此函数保存在名为calc_distance.m.

在您的主脚本中,您可以使用这样的两个函数来生成示例中的数组并计算距离:

n = 4;
x_step = 10;
y_step = 5;

x_point = -10;
y_point = 5;

for j = 1:n
    y0_pos = j;
    for i = 1:n
        x0_pos = i;
        a_parent{i,j} = generate_array(n, x0_pos, y0_pos, x_step, y_step);
        dist_parent{i,j} = calc_distance(a_parent{i,j},x_point,y_point);
    end
end

这将构造一个 4x4 元胞数组a_parent,其中每个元胞包含另一个 4x4 元胞数组。在(1,1)单元格中将是原点在位置的坐标单元格数组(1,1),在(1,2)单元格中将是原点所在的坐标单元格数组,(1,2)依此类推。

此外,它将生成一个名为的单元阵列dist_parent,它再次包含 4x4 单元阵列,其中包含 4x4 不同单元阵列到您各自点的所有距离。作为一个例子,我计算了到该点的所有距离(5,5)


推荐阅读