2016-06-11 71 views
1

所以我有一个可以用2个矢量描述的直线网格。 1表示单元格中心的x坐标,另一个表示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)和电网由这样Matlab - 从中​​点计算1d个连续线段边缘的算法?

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 so 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的一样。然而,这是行不通的,我的y矢量在边缘间距应该是40的区域是35,45,35,45 ...大约。

任何人都有任何想法,为什么这不起作用,并可以指出我在正确的方向。干杯

编辑:试图找到利用几何alebra一个解决方案:

enter image description here

我们正在努力寻找点A,B,C,....小时。从基本几何我们知道:

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

+0

我不知道这是有关您的问题,但检查['voronoi'](http://in.mathworks.com/help/matlab/ref/voronoi.html )功能及其背景。我相信他们有一个函数来计算顶点。但是,如果不合适,则很抱歉。 – crazyGamer

+0

你在第二行失去了我。 “像x间距是50缩放到10缩放到20”是什么意思?你是怎么从中得到“(55..45..30..10,10,10..10,12..20,20,20)”的?什么是缺失值?我认为这个问题可以通过简单地对您的样本数据进行计算来简化。你有很多关于什么都不起作用的随机数据,但没有任何我能够看到的,正是你想要的结果。 – beaker

+0

@beaker这只是中点之间的距离,所以第一对中点是50分开,然后他们缩小到20,所以间距逐渐减小到20,而其中间点20则缩小到10,然后缩小到20.我想要的是计算我的中点之间的一组数字,每个中点之间的数字都是精确的中心点。 –

回答

0

看来你只是想插值数据。你可以用做内置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'); 

这只是设置了原始数据为甚至 -indexed元素和内插指标,包括外推的两个端点。

结果:

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