2009-08-24 22 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