1

我计划将 Geometry 对象拆分为一系列更简单的形状,并使用以下公式组合它们的质心:此公式

的数学细节可在此 Wikipedia 文章中找到。

注意:如果我对数学的看法不正确,请不要感到惊讶。除了三角学,我还没有做过任何复杂的数学运算,也从来没有处理过希腊字母。我想我很好理解这一点,但是如果我弄错了,请告诉我。

信息说明:几何形状或棱柱的质心不仅仅是形状的中间。它是重心或质心。我假设 Geometry 对象也可以封装 3D 棱镜,所以我将来可能必须考虑到这一点,但现在我只关注 2D 几何。对于 2D 形状,您必须将其想象为具有给定形状的硬纸,质心将是这张纸在针上平衡的点。

我面临的第一个问题是我需要找到一种方法来准确地将任何给定的 Geometry 对象拆分为足够简单的形状,这样这个公式才能正常工作。有谁知道如何实现这一点?还是有更好的程序仍然可以普遍使用?

我面临的第二个问题是,在几何体被分割后,我该如何找到每个部分的质心?每种类型的简单形状(三角形、四边形、半圆形等)都有自己的质心公式。有没有办法让我弄清楚每件作品是哪种形状?

4

2 回答 2

3

任意二维平面形状的细分或离散化是有限元分析中的常见问题。它通常用平面三角形或四边形完成。尝试 Google 搜索“2d 有限元网格生成”或四叉树或八叉树网格生成。您可以计算每个简单形状的质心并应用您引用的(正确)公式。

这样的东西。或者这些。当然,您必须为所讨论的主体提供原始几何图形。

你还有很长的路要走。您必须执行以下所有操作:

  1. 查找自动网格划分程序并学习如何为您的 2D 形状输入几何图形。
  2. 运行自动网格器并获得一个网格输出,它将包含空间中的所有 2D 点以及所有三角形和四边形元素的连接性。
  3. 编写程序读取网格并计算每个元素的面积和质心。
  4. 将这些值插入您引用的公式中,以计算原始 2D 形状的质心。这意味着循环遍历所有元素并累积区域以及每个元素质心及其区域的 (x,y) 坐标的乘积。
  5. Once you have an answer, you need to check convergence. You do this by refining your mesh by making the elements smaller and recalculating. You know you've converged when you refine the mesh and the answers change by less than a small tolerance (5% or whatever you're willing to tolerate).

It's still a fair amount of work.

UPDATE: This one looks quite good, and it's open source.

于 2009-08-25T01:21:40.440 回答
0

我没有任何代码,但我已经看到了形状被镶嵌的地方(在这种情况下使用多边形三角剖分),所以你会有一组很好的三角形。然后根据三角形质心的加权平均值计算组合质心。

编辑:

有一个由 AGI开发名为Insight3D产品的人撰写的博客。在这篇文章中,他们谈到了三角测量。它可能会帮助您做到这一点,因为他们确实提供了更多关于算法的指示。根据您的使用情况,您也许可以重用它们的实现之一。它可以免费用于开发和非商业用途。

于 2009-08-24T21:02:51.060 回答