如何平衡二维平面上的重量

问题描述

我正在从事一个小型 Unity 爱好项目,我正在尝试为 3D 空间中的宇宙飞船的推进器编程。推进器正在工作,但我在将推力中心与质心匹配时遇到了一些问题。我希望推进器根据它们相对于移动方向的位置自动调整它们的强度。

如果更简单地看待问题,我就会遇到这种情况:

我在 2D 平面上的随机位置放置了随机数量的权重。每个砝码的质量未知,所有砝码的质心必须在 0,0。

如何计算每个重物的质量?

Example of weight placement

到目前为止,我将问题可视化为一个 2D 空间,其中必须通过增加权重的质量将质心“拉”到 0,0。但我无法找出一种算法来准确地做到这一点,并且重量之间的质量增量最小。

解决方法

您所描述的问题是约束不足的。以 m1、m2 等为质量,以 (x1,y1)、(x2,y2) 等为坐标:

m1 * x1 + m2 * x2 + m3 * x3 + m4 * x4 = 0
m1 * y1 + m2 * y2 + m3 * y3 + m4 * y4 = 0

将 m3 和 m4 设置为零,这很容易。

您有四个自由变量(4 个质量)来匹配两个方程。唯一的复杂之处在于,质量可能必须对所有值都为正。

在您的情况下解决此问题的最佳方法是选择一个默认质量,然后尝试每对质量 (m1,m2),(m1,m3),m4),(m2,m3)等,求解方程,其他质量设置为默认质量。

因此,如果默认质量为 5kg,则设置 m3 = 5kg 和 m4 = 5kg,求解 m1 和 m2,例如,m1 = 3kg 和 m2 = 6kg。对所有质量对重复此操作。选择与默认质量偏差最小且不为负值的对。