相关疑难解决方法(0)

找到多边形的质心?

为了获得中心,我已经尝试为每个顶点添加总数,除以顶点数.

我也试图找到最顶端,最底部 - >获得中点...找到最左边,最右边,找到中点.

这两个都没有返回完美的中心,因为我依靠中心来缩放多边形.

我想缩放我的多边形,所以我可以在它们周围放置一个边框.

找到多边形的质心的最佳方法是多边形可能是凹的,凸的并且有许多不同长度的边?

c c++ vector vector-graphics

45
推荐指数
3
解决办法
6万
查看次数

凸多面体的质心

我有一个封闭的凸多面体,它是由一个凸多边形(面)阵列定义的,这些多边形由三维空间中的顶点数组定义.假设密度均匀,我试图找到多面体的质心.目前我用这个伪代码中的算法计算它.

public Vector3 getCentroid() {
    Vector3 centroid = (0, 0, 0);
    for (face in faces) {
        Vector3 point = face.centroid;
        point.multiply(face.area());
        centroid.add(point);
    }
    centroid.divide(faces.size());
    return centroid;
}
Run Code Online (Sandbox Code Playgroud)

这基本上取面的质心的加权平均值.我不是100%确定这是正确的,因为我无法在线找到正确的算法.如果有人可以确认我的算法或引用我一个正确的算法我会很感激.

谢谢.


[编辑]

所以这是我用来查找质心的实际Java代码.它将多面体分解为会聚在多面体内任意点上的金字塔.金字塔质心的加权平均值基于以下公式.

C all = SUM 所有金字塔(C 金字塔*体积金字塔)/体积全部

这里是(大量注释的代码):

    // Compute the average of the facial centroids.
    // This gives an arbitrary point inside the polyhedron.
    Vector3 avgPoint = new Vector3(0, 0, 0);
    for (int i = 0; i < faces.size(); i++) {
        avgPoint.add(faces.get(i).centroid); …
Run Code Online (Sandbox Code Playgroud)

java math geometry physics physics-engine

7
推荐指数
1
解决办法
2728
查看次数

标签 统计

c ×1

c++ ×1

geometry ×1

java ×1

math ×1

physics ×1

physics-engine ×1

vector ×1

vector-graphics ×1