所以我有一個可以用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.我想要的是計算我的中點之間的一組數字,每個中點之間的數字都是精確的中心點。 –