2009-08-24 29 views
1

我打算在具有到幾何對象分成一系列更簡單的形狀,並且使用此公式結合自身的質心:該式中的

數學細節可以在this Wikipedia article找到。如何爲任何System.Windows.Media.Geometry對象的質心創建算法?

通知:如果我對數學的看法不正確,請不要驚訝。我沒有做過三角函數的任何複雜的數學計算,我從來不需要處理希臘字母。我認爲我很瞭解這一點,但如果我弄錯了,請告訴我。

信息註釋:gometric形狀或棱鏡的質心不只是形狀的中心。它是重心或質心的中心。我假設幾何對象也可以封裝3D棱鏡,所以我將來可能必須考慮到這一點,但現在我只關注2D幾何。對於二維形狀,您必須將其想象爲具有給定形狀的硬紙片,並且質心將成爲這張紙在針上平衡的點。

我面臨的第一個問題是,我需要找到一種方法來將任何給定的幾何對象精確地分割成足夠簡單的形狀,因此此公式可以正常工作。有沒有人有任何想法如何實現?還是有更好的程序,仍然普遍工作?

我面臨的第二個問題是,在幾何被拆分之後,我該如何去找出每件的質心?每種類型的簡單形狀(三角形,四邊形,半圓形等)都有其自己的質心公式。有沒有辦法讓我確定每件作品的形狀?

+0

沒有通用公式,只有形狀特定。 – 2009-08-24 20:36:35

+0

謝謝,蘭斯。我將編輯該部分。 – Giffyguy 2009-08-24 20:48:08

+1

您對數學的看法是正確的。 – duffymo 2009-08-25 01:23:23

回答

3

任意二維平面形狀的預處理或離散化是有限元分析中的常見問題。它通常用平面三角形或四邊形完成。嘗試谷歌搜索"2d finite element mesh generation"或四叉樹或八叉樹網格生成。您可以計算每個簡單形狀的質心並應用您引用的(正確)公式。

類似this的東西。或者these。當然,你必須爲所討論的身體提供原始幾何圖形。

你已經排了很長時間了。您必須執行以下所有操作:

  1. 找到自動齧合程序並學習如何輸入2D形狀的幾何圖形。
  2. 運行自動網格劃分器並獲取網格輸出,該網格輸出將包含空間中的所有2D點以及所有三角形和四邊形元素的連接。
  3. 編寫程序讀入網格並計算每個元素的面積和質心。
  4. 將這些值插入您引用的公式中以計算原始2D形狀的質心。這意味着循環所有元素並將區域累積爲每個元素質心及其區域的(x,y)座標的乘積。
  5. 一旦你有了答案,你需要檢查收斂。您可以通過將元素縮小並重新計算來完善網格。當你細化網格時,你知道你已經收斂了,並且答案的變化小於一個小公差(5%或任何你願意容忍的)。

這仍然是一個相當數量的工作。

更新:This one看起來不錯,它是開源的。

+0

有趣......我將不得不嘗試一下,看看他們能做些什麼。 – Giffyguy 2009-08-25 04:18:50

+0

這看起來像aweome解決方案,它基本上是我想要採用的道路 - 但我真正想要的是弄清楚如何自己計算網格。你知道我可以在哪裏找到這個算法嗎? – Giffyguy 2009-08-25 20:09:50

+0

谷歌針對「有限元自動網格三角形」,並選擇最詳細的一個,你可以找到。可能需要一段時間的代碼 - 這不會是微不足道的。您可能只想使用存在的東西:http://www-users.informatik.rwth-aachen.de/~roberts/software.html – duffymo 2009-08-25 22:19:57

0

我對此沒有任何代碼,但是我已經看到了形狀在哪裏tesselated(在這種情況下使用polygon triangulation),所以你會有一個很好的三角形集。然後根據三角形質心的加權平均值計算組合質心。

編輯:

有一個博客通過對由AGI稱爲Insight3D產品工作的傢伙。在這個entry,他們談論三角測量。它可能會幫助你做到這一點,因爲它們給出了更多關於算法的指針。根據您的使用情況,您可能可以重複使用其implementationsone。它免費用於開發和非商業用途。

+0

我一直在研究這幾個小時,它看起來像tesselation是要走的路。但是我仍然需要一個很好的算法來執行tesselation。我還沒有找到明確的任何東西,代碼或數學。 – Giffyguy 2009-08-24 22:47:02