我想知道在3D中找到任意形狀中心的準確方法。 圖中我解釋了3個案例。如何在3D中計算任意形狀的中心?
在第一種情況下,我們如何計算任意點的中心?一個想法是所有點的總和除以總點數。它是唯一的方法嗎?它是否準確?
第二是如何計算3D中不規則任意形狀的近似中心?這是1的情況嗎?
我們如何計算由任意頂點組成的彎曲/彎曲管的中心線?對於這個問題,我們必須解決前兩種情況,我認爲這樣呢?
我想知道在3D中找到任意形狀中心的準確方法。 圖中我解釋了3個案例。如何在3D中計算任意形狀的中心?
在第一種情況下,我們如何計算任意點的中心?一個想法是所有點的總和除以總點數。它是唯一的方法嗎?它是否準確?
第二是如何計算3D中不規則任意形狀的近似中心?這是1的情況嗎?
我們如何計算由任意頂點組成的彎曲/彎曲管的中心線?對於這個問題,我們必須解決前兩種情況,我認爲這樣呢?
該解決方案實際上取決於你所真正期待的。
如果你尋找一個形狀中所有點的平均位置,那麼對它們進行平均就可以得到這個結果。但它可能遠離你直覺所說的「在中間」。例如,考慮一個方框,其中一方的頂點數量是對方的兩倍。平均位置將在該邊的一半,而不是在框的中間。
更可能的是,我會說你正在尋找通過計算每個維度的最大和最小範圍並且然後對這兩個範圍進行平均而定義的點。因爲你這個標記用C++,這裏的一些示例代碼:
// Define max and min
double max[DIMENSIONALITY];
double min[DIMENSIONALITY];
// Init max and min to max and min acceptable values here. (see numeric_limits)
// Find max and min bounds
for(size_t v_i = 0; v_i < num_vertices; ++v_i)
{
for(int dim = 0; dim < DIMENSIONALITY; ++dim)
{
if(shape[v_i][dim] < min[dim]) min[dim] = shape[v_i][dim];
if(shape[v_i][dim] > max[dim]) max[dim] = shape[v_i][dim];
}
}
// Calculate middle
double middle[DIMENSIONALITY];
for(int dim = 0; dim < DIMENSIONALITY; ++dim)
middle[dim] = 0.5 * (max[dim] + min[dim]);
無論哪種解決方案,問題的維度並不重要。
編輯: 由於在下面的評論中指出,這可能會導致一箇中間點,其位於形狀本身之外。如果你需要一個點裏面形狀,必須使用一種替代方法。一個簡單的解決方案可以是在每個軸上使用光線行進。
只要多邊形凹入,那麼此結果可能會落在多邊形之外。 – acraig5075
當然,我知道這一點。但也許我應該指出。 – Agentlien
射線追蹤三線可以考慮但是..想象當你有這樣一個彎曲的形狀管?你在一個無限光線中有多於一個三角形..? – furqan
首先,你是什麼意思的「中心」? – Agentlien
這幾乎是C++ .... – Caribou
這是數學,而不是編程。 –