【问题标题】:Matlab - Algorithm for calculating 1d consecutive line segment edges from midpoints?Matlab - 从中​​点计算一维连续线段边缘的算法?
【发布时间】:2016-06-11 17:11:56
【问题描述】:

所以我有一个可以用 2 个向量描述的直线网格。 1 表示单元中心的 x 坐标,1 表示 y 坐标。这些只是间距像 x 间距是 50 缩放到 10 缩放到 20 (55..45..30..10,10,10..10,12..20,20,20) 和 y 间距是 60 的点缩放到 40 缩放到 60 (60,60,60,55..42,40,40,40..40,42..60,60) 并且网格是这样制作的

e.g. x = 1 2 3, gridx = 1 2 3, y = 10 11 12, gridy = 10 10 10 
                        1 2 3                        11 11 11
                        1 2 3                        12 12 12

那么单元格中心 1 是 1,10 cc2 是 2,10 等等。

现在我试图制定一种算法来计算单元格边缘在 x 和 y 方向上的位置。所以就像我的第一个想法是首先使用 x(1)-[x(2)-x(1)]/2 获得第一条边,在实际情况下 x(2)-x(1) 等于 60 并且x(1) = 16348.95 所以 celledge1 = x(1)-30 = 16318.95。然后在计算第一个之后,我通过一个循环并像这样计算其余部分:

for aa = 2:length(x)+1
    celledge1(aa) = x(aa-1) + [x(aa-1)-celledge(aa-1)]
end

我也为 y 做了同样的事情。然而,这不起作用,我在边缘间距应该为 40 的区域中的 y 向量是 35、45、35、45... 大约。

任何人都知道为什么这不起作用并且可以指出我正确的方向。干杯

编辑:尝试使用几何代数找到解决方案:

我们试图找到点 A,B,C,....H。从基本几何我们知道:

c1 (centre 1) = [A+B]/2 and c2 = [B+C]/2 etc. etc.

所以我们有 7 个方程和 8 个变量。我们还知道中心之间的前几个距离相等(60,60,60,60),因此第一段也是 60。

B - A = 60 

所以现在我们有 8 个方程和 8 个变量,所以我在 Matlab 中制作了这个算法:

edgex = zeros(length(DATA2.x)+1,1);
edgey = zeros(length(DATA2.y)+1,1);

edgex(1) = (DATA2.x(1)*2-diffx(1))/2;
edgey(1) = (DATA2.y(1)*2-diffy(1))/2;

for aa = 2:length(DATA2.x)+1
    edgex(aa) = DATA2.x(aa-1)*2-edgex(aa-1);
end

for aa = 2:length(DATA2.y)+1
    edgey(aa) = DATA2.y(aa-1)*2-edgey(aa-1);
end

我仍然得到与以前相同的答案,y 间距为 35,45,35,45,应该是 40,40,40...这可能是精度错误吗??

编辑:如果您感兴趣,这里是数字,我只在 excel 中进行了与上述相同的计算:http://www.filedropper.com/workoutedges

【问题讨论】:

  • 我想知道这是否与您的问题有关,但请检查 voronoi 函数及其背景。我相信他们有计算顶点的功能。但是,如果不合适,请见谅。
  • 你在第二行失去了我。 “像 x 间距是 50 缩放到 10 缩放到 20”是什么意思?您是如何从中获得值“(55..45..30..10,10,10..10,12..20,20,20)”的?什么是缺失值?我认为这个问题可以通过简单地对您的样本数据进行计算来简化很多。你有很多关于什么不起作用的随机位,但我看不到任何东西能准确说明你想要的结果是什么。
  • @beaker 这只是中点之间的距离,所以前几个中点相距 50,然后它们缩小到 20,因此间距逐渐减小到 20,它的 20 为中点的数量然后缩小到 10,然后缩小到 20。我想要的只是计算我的中点之间的一组数字,其中每个中点之间是精确的中心。
  • 那么,缩放只是数据发生了什么?为什么为了解决问题需要知道这一点?据我所知,这只是插值(对端点进行外推),对吗?如果您发布了一个示例数据集以及该数据集所需的结果,那将会非常很有帮助。
  • @beaker 我在底部做了。一张excel表格。唯一需要的是所有中点都在边缘点的正中间。

标签: algorithm matlab cell mesh


【解决方案1】:

您似乎只是想插入数据。你可以使用内置的interp1

x = [30 24 19 16 8 7 16 22 29 31];
xi = interp1(2:2:numel(x)*2, x, 1:(numel(x)*2+1), 'linear', 'extrap');

这只是将原始数据设置为 even 索引元素并插入 odd 索引,包括两个端点的外推。

结果:

xi =

 Columns 1 through 11:

   33.0000   30.0000   27.0000   24.0000   21.5000   19.0000   17.5000   16.0000   12.0000    8.0000    7.5000

 Columns 12 through 21:

    7.0000   11.5000   16.0000   19.0000   22.0000   25.5000   29.0000   30.0000   31.0000   32.0000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    相关资源
    最近更新 更多