我正在構建一個與PolyLineZ(ESRI Shapefile)數據一起使用並重寫外部Z值的窗體應用程序。的最小和最大Z值由用戶通過接口定義當給定完整和不完整的XYZ對時插值Z值
讓我們採取以下作爲一個例子,讓我們說,最小值爲0,最大值爲10:
XY Z
1,1 0
1,3 1
1,5 7
1,7 11*
1,10 10
與該值11需要插值,因爲它不落入用戶定義的範圍。這顯然是一個非常簡單的例子。一些PolyLines可能缺少更多值。
我做了什麼:
我研究過線性插值。看了一下YouTube視頻的例子,我的頭很難看。
我需要什麼:無論從任何語言或背後線性/雙線性/三線性插值理論的「英語」的解釋
代碼示例,這樣我可以落實到我的計劃。我的數學技能並不是最大的,所以我很難理解wikipedias的定義。
我也假設線性插值就是我需要研究,
編輯:目前實施以下,停止我,如果我錯了
我使用的是什麼,我認爲是畢達哥拉斯理論型的方法。我沒有做它捕獲的異常,但(即,確保左點實際上是留,確保列表中不運行出界等),可以晚一點
internal static double calculateDistance(XYPoints a, XYPoints b)
{
double xd = b.X - a.X;
double yd = b.Y - a.Y;
return Math.Sqrt(xd * xd + yd * yd);
}
for (var i = 0; i < polylinez.ZPoints.Count;i++)
{
if (polylinez.ZPoints[i] > maxValue || (polylinez.ZPoints[i] < minValue))
{
//polylinez.ZPoints[i] = (((1 - polylinez.XYpoints[i].X) * polylinez.ZPoints[i - 1]) + (polylinez.XYpoints[i].X * polylinez.ZPoints[i + 1]));
double prevdistance = calculateDistance(polylinez.XYpoints[i - 1], polylinez.XYpoints[i]);
double nextdistance = calculateDistance(polylinez.XYpoints[i], polylinez.XYpoints[i + 1]);
double fraction = prevdistance/nextdistance;
double diffsBetweensZ = polylinez.ZPoints[i + 1] - polylinez.ZPoints[i - 1];
Console.WriteLine(polylinez.ZPoints[i - 1] + (diffsBetweensZ * fraction));
}
}
return polylinez;
它返回9.12作爲上述示例表的答案。這聽起來對我來說很合適。我用互聯網上的樣本數據檢查了我的距離計算器方法,並且它似乎在做這個伎倆。
這是否應該移動到http://math.stackexchange.com/? – jacknad
如果您還沒有嘗試編碼,我不認爲這是適合尋找答案的地方。嘗試寫下來,然後回來。 –
我開發了整個窗體表單應用程序(加載文件,類所有設置等)!我只是堅持實現線性插值的邏輯。我並不是要求某人爲我寫信,而是朝着正確的方向努力。 –