所以我有一个可以用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一个解决方案:
我们正在努力寻找点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
我不知道这是有关您的问题,但检查['voronoi'](http://in.mathworks.com/help/matlab/ref/voronoi.html )功能及其背景。我相信他们有一个函数来计算顶点。但是,如果不合适,则很抱歉。 – crazyGamer
你在第二行失去了我。 “像x间距是50缩放到10缩放到20”是什么意思?你是怎么从中得到“(55..45..30..10,10,10..10,12..20,20,20)”的?什么是缺失值?我认为这个问题可以通过简单地对您的样本数据进行计算来简化。你有很多关于什么都不起作用的随机数据,但没有任何我能够看到的,正是你想要的结果。 – beaker
@beaker这只是中点之间的距离,所以第一对中点是50分开,然后他们缩小到20,所以间距逐渐减小到20,而其中间点20则缩小到10,然后缩小到20.我想要的是计算我的中点之间的一组数字,每个中点之间的数字都是精确的中心点。 –