![]() |
1
9
首先找到它的质心(cm)。一个稳定的位置就是厘米 较高的 如果你稍微旋转一下。现在看看外壳,包围形状的最小凸起区域: Convex Hull and Centre of Mass http://walkytalky.net/extern/hull.png 如果船体是一个多边形,那么一个稳定的位置就是形状停留在其中一个边上,而cm直接在该边上(不一定在该边的中点上,就在它上面的某个地方)。 如果船体有曲线(也就是说,如果形状有与船体接触的曲线),必须对其进行特殊处理。如果cm位于曲线最低点正上方,且曲线在该点的半径大于cm的高度,则形状将稳定在曲线边缘上。 实例:
Illustration of the examples http://walkytalky.net/extern/stable.png (标有x的椭圆位置不稳定,因为曲率小于到质心的距离。) |
![]() |
2
3
注意:这个答案假设你的形状是一个正确的多边形。 为了我们的目的,我们将平衡位置定义为 质心在物体最左侧和最右侧地面接触点之间的点正上方。 (假设地面是垂直于重力的平面)。这在所有情况下都适用,适用于所有形状。 注意,这实际上是 physical definition 由于牛顿转动运动学,转动平衡。 对于一个适当的多边形,如果我们消除它们位于唯一顶点上的情况,这个定义就相当于一个稳定的位置。 所以,如果你有一个垂直向下的重力,首先要找到它最左边和最右边接触地面的部分。 然后,计算质心。对于具有已知顶点和 均匀密度 ,这个问题被简化为 Centroid ( relevant section ) 然后,从你的COM上放一条线;如果COM和地面的交点在这两个x值之间,它就处于平衡状态。 如果最左边的点和最右边的点匹配(例如,在一个圆形的对象中),这仍然有效;记住要小心浮点比较。 注意,这也可以用来测量物体的“多稳定”——这是质量中心在不在两个接触点范围内之前可以移动的最大Y距离。 编辑:仓促制作的精美图表 Diagram http://img52.imageshack.us/img52/9506/1276930988102131dc.png 那么,你怎么能用它找到所有可以坐在桌子上的方法呢?见: 编辑 可编程方法而不是旋转形状的计算代价昂贵的任务,试试这个。 程序中形状的表示形式可能包含所有顶点的列表。 查找形状的顶点 convex hull (基本上是你的形状,但是所有的凹顶点——被“推入”的顶点——都被消除了)。 然后遍历凸壳上的每对相邻顶点(即,如果我有顶点A、B、C、D,我将遍历AB、BC、CD、DA) 做这个测试:
这应该能解决问题。 下面是在一对顶点上运行测试的示例: Example test http://img17.imageshack.us/img17/918/stabled.png 如果您的形状不是由它在数据结构中的顶点表示的,那么您应该尝试转换它们。如果它类似于一个圆或一个椭圆,你可以用试探法来猜测答案(一个圆有无限的平衡位置;一个椭圆4,尽管只有两个“稳定”点)。如果它是一个弯曲而不规则的形状,你必须提供你的数据结构,以便我能够以一种与程序相关的方式提供帮助,而不仅仅是提供个案启发。 |
![]() |
3
0
我相信这不是最有效的算法,但这是一个想法。 如果可以对多边形的垂直线进行排序(假设其顶点数目有限),那么只需迭代相邻的顶点对,并通过某种形式的模拟记录其所处的角度。在像星星这样的奇怪形状的情况下,它会有重复的方向,但是你可以通过跟踪静止的旋转来适应它。 |
![]() |
fghjk · 绘制轨迹(python) 7 年前 |
![]() |
datapanda · 三维网格的莫顿反向编码 7 年前 |
![]() |
Bikash · 在Mathematica中绘制量子谐振子 7 年前 |
![]() |
Kinaeh · Java-物理计算的数据类型是什么? 7 年前 |
![]() |
mallwright · btMultiBody中的关节抽搐 7 年前 |
|
user7884512 · 确定目标距离处的最终速度 7 年前 |