AABB
AlignmentBehavior
ArriveBehavior
AStar
BFS
BoundingSphere
BVH
BVHNode
Cell
CellSpacePartitioning
CohesionBehavior
CompositeGoal
ConvexHull
Corridor
CostTable
DFS
Dijkstra
Edge
EntityManager
EvadeBehavior
EventDispatcher
Behavior
FollowPathBehavior
FuzzyAND
FuzzyCompositeTerm
FuzzyFAIRLY
FuzzyModule
FuzzyOR
FuzzyRule
FuzzySet
FuzzyTerm
FuzzyVariable
FuzzyVERY
GameEntity
Goal
GoalEvaluator
Graph
GraphUtils
HalfEdge
HeuristicPolicyDijkstra
HeuristicPolicyEuclid
HeuristicPolicyEuclidSquared
HeuristicPolicyManhattan
InterposeBehavior
LeftSCurveFuzzySet
LeftShoulderFuzzySet
LineSegment
Logger
MathUtils
Matrix3
Matrix4
MemoryRecord
MemorySystem
MeshGeometry
MessageDispatcher
MovingEntity
NavEdge
NavMesh
NavMeshLoader
NavNode
Node
NormalDistFuzzySet
OBB
ObstacleAvoidanceBehavior
OffsetPursuitBehavior
OnPathBehavior
Path
Plane
Polygon
Polyhedron
PriorityQueue
PursuitBehavior
Quaternion
Ray
RectangleTriggerRegion
Regular
RightSCurveFuzzySet
RightShoulderFuzzySet
SAT
SeekBehavior
SeparationBehavior
SingletonFuzzySet
Smoother
SphericalTriggerRegion
State
StateMachine
SteeringBehavior
SteeringManager
Task
TaskQueue
Telegram
Think
Time
TriangularFuzzySet
Trigger
TriggerRegion
Vector3
Vehicle
Version
WanderBehavior

Centroid - 多面体重心

centroid 函数用于计算多面体的重心。这个函数接收一个 Polyhedron 对象作为输入,返回一个数组 [x, y, z],表示多面体的重心的坐标。

语法

centroid(polyhedron)

参数

  • polyhedron: 必须是一个有效的 Polyhedron 对象,表示要计算重心的多面体。

返回值

如果输入的参数不是有效的 Polyhedron 对象,则会返回空数组 []。否则,将会返回一个数组 [x, y, z] 表示多面体的重心坐标。

示例

以下示例展示了如何计算一个正方体的重心。

// 定义一个正方体
const cube = new Polyhedron({
  vertices: [
    { x: -1, y: -1, z: -1 },
    { x: -1, y: -1, z:  1 },
    { x: -1, y:  1, z: -1 },
    { x: -1, y:  1, z:  1 },
    { x:  1, y: -1, z: -1 },
    { x:  1, y: -1, z:  1 },
    { x:  1, y:  1, z: -1 },
    { x:  1, y:  1, z:  1 }
  ],
  faces: [
    { a: 0, b: 1, c: 3, d: 2 },
    { a: 1, b: 5, c: 7, d: 3 },
    { a: 5, b: 4, c: 6, d: 7 },
    { a: 4, b: 0, c: 2, d: 6 },
    { a: 2, b: 3, c: 7, d: 6 },
    { a: 0, b: 4, c: 5, d: 1 }
  ]
});

// 计算正方体的重心
const center = centroid(cube);
console.log(center); // 应该输出 [0, 0, 0]

实现原理

centroid 函数基于以下原理计算多面体的重心:

  • 首先计算多面体的体积。
  • 然后根据多面体的表面积和法向量计算每个面对重心的贡献。
  • 最后将每个面的贡献相加得到多面体的重心坐标。

在实现过程中,我们使用了多项式求解来计算多面体的体积和面的贡献。具体细节可以参考源码。