【问题标题】:Compute the centroid of a 3D planar polygon计算 3D 平面多边形的质心
【发布时间】:2011-01-22 07:00:56
【问题描述】:

这是与one here 类似的问题。

给定定义表面的 3D 坐标列表(Point3D1Point3D2Point3D3 等),如何计算表面的质心

在 2D 中计算 is given by the following formula:

3D 模拟呢?

【问题讨论】:

  • 面积和质心是非常不同的东西。你要哪个?
  • 我想要centroid,错字已修复
  • 这些点如何定义表面?如果所有点都在曲面的边界上(如目前所有答案所假设的那样),并且它们不一定都在同一平面上,则未定义曲面。如果他们定义了三角测量,那就完全不同了。或者也许你只有一个点云?这是什么?
  • @AB:所有点都必须定义曲面;它们必须位于同一平面上。这是假设。
  • 那么下面的两个答案都很好。

标签: c# math computational-geometry


【解决方案1】:

如果它是一个平面,您可以转换到该平面的局部坐标系,使用您提供的公式计算质心,然后再转换回来以获取其在 3D 空间中的坐标。

【讨论】:

  • 除了坐标变换,还有直接的方法吗?如果不是,我将不胜感激有关如何转换坐标的公式。
【解决方案2】:

令点逆时针为v0, v1, ..., vN,其中vi = (xi, yi, zi).

然后是三元组 (v0, v1, v2), (v0, v 2, v3), ..., (v0, vi, vi +1), ..., (v0, vN-1, vN) 形成 N-1 个三角形创建多边形。

每个三角形的面积是| (vi - v0) × (vi+1 - v0) | ÷ 2,其中 × 是叉积,| · |是向量长度。

您可能需要将该区域设为负值以补偿凹入部分。一个简单的检查是计算 (vi - v0) × (vi+1 - v0) · (v1 - v0) × (v2 - v0)乙>。该区域应与结果具有相同的符号。

由于在平行投影下二维图形的面积比是恒定的,您可能希望选择一个不平行于平面的单位向量(例如 z),处理 (vi - v0) × (vi+1 - v0) · z 作为面积。有了这个,您不需要执行昂贵的平方根,并且会自动处理符号检查。

每个三角形的质心为(v0 + vi + vi+1) ÷ 3.

因此,假设密度均匀,整个多边形的质心是,

                1       N-1
centroid = ——————————    ∑  ( centroid-of-triangle-i × area-of-triangle-i )
           total-area   i=1

(对于 ≥ 4D 的维度,需要用 Ai = ½ |vi−v0| |v 计算面积i+1−v0| sin θi,其中 cos θi = (vi -v0)·(vi+1-v0).)

【讨论】:

  • 由于在平行投影下二维图形的面积比是恒定的,你可能想选择一个不平行于平面的单位向量(例如 z),处理 (vi − v0) × (vi+1 − v0) · z 为面积。可以在这部分更明确吗?
  • 以z = (v1-v0) × (v2-v0)为例。
  • @KennyTM,我认为你的表述很好。但是有没有办法消除对v0 的特殊依赖?很像上述 2D 质心计算的公式。我确信通过一些调整是可以做到的。
  • @Ngu:任何 v0 都可以。或者你可以使用 tom10 的解决方案 (stackoverflow.com/questions/2355931/…)
  • @KennyTM,我的意思是,我不希望任何v0 或其他下标(例如1、2、3)出现在我的euqation 中。或者,换句话说,方程必须只涉及vivi+1vi-1 等。没有特殊的v0v1v2。有没有可能构造出这样的方程?
【解决方案3】:

只需使用你有两次的方程式,但第二次将 z 换成 y

即计算两个投影的质心,一个在x-y平面上,另一个在x-z平面上。投影的质心将是实际质心的投影,因此答案将是您从中找到的 xyz 值这两个计算。

更明确地说:如果您的点是 (x1, y1, z1), (x2, y2, z2),... ,要获得 xy 质心 (Cx, Cy),请使用 (x1, y1), (x2, y2),... 并获得 xz 质心, (Cx, Cz) 使用点 (x1, z1), (x2, z2),.... - 只需进行第二次计算使用相同的 2D 公式,将 z 值视为方程中的 y。然后您的 3D 质心将是 (Cx, Cy, Cz)。只要您的表面是平坦的并且不平行于 x-y、x-z 或 y-z 平面(但如果平行,则它只是二维方程),这将起作用。

【讨论】:

  • @tom10,可以更明确一点吗?
  • 好的,添加了一段给出更明确的描述。是说你需要知道的吗?
  • @tom10,在这种情况下有两组Cx。选择哪一个?还是我们只取平均值?
  • Cx 的两个计算应该给出相同的结果。
猜你喜欢
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 2013-11-14
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多