问题

为什么手机只能围绕三个对称轴其中的两个稳定地旋转?

回答
你这个问题问得很有意思,触及到了物理学中一个挺有趣的现象,也就是物体围绕不同轴旋转时的稳定性问题。手机这玩意儿,虽然在我们眼里是个扁平的长方形,但它在物理模型上,其实更像是一个三维的、略微不规则的刚体。

首先,咱们得明白,手机围绕它的中心点旋转,这个“中心点”可不是随便找的,而是它的质心。物体围绕质心旋转的时候,如果没有任何外力干扰,它理论上是可以一直转下去的。但问题就出在“稳定”这两个字上。

为啥说手机有三个潜在的旋转轴,但只有两个是稳定的?这跟物体的转动惯量有关系。转动惯量,你可以理解成物体抵抗转动变化的“惯性”。质量分布越均匀、越集中在旋转轴上的物体,转动惯量就越小,越容易被加速或减速;反之,质量分布越分散的,转动惯量就越大,越难改变转动状态。

对于一个三维的刚体来说,它在任何方向上都有一个转动惯量。但关键点在于,存在三个特殊的互相垂直的轴,围绕它们旋转时,物体的转动惯量是极值,通常称之为“主轴”。对于手机这样的物体,最直观的三个主轴就是:

1. 穿过屏幕中心,垂直于屏幕平面的轴(我们称之为Z轴):你可以想象拿着手机,让它像陀螺一样,屏幕朝上或朝下,然后围绕这个垂直线旋转。
2. 穿过屏幕中心,沿着手机长边方向的轴(我们称之为X轴):就是让手机像烤串一样,围绕着它的长度方向旋转。
3. 穿过屏幕中心,沿着手机短边方向的轴(我们称之为Y轴):就是让手机像船桨一样,围绕着它的宽度方向旋转。

这三个轴的转动惯量大小是不同的。为什么?因为手机不是一个完美的、质量分布绝对均匀的长方体。屏幕、电池、主板、摄像头模组等等,这些组件的分布是有差异的,导致了在不同方向上,质量离质心的远近是不同的。

一般情况下,对于一个像手机这样形状相对扁平的物体,我们会发现它的三个主轴的转动惯量大小关系大概是:绕长轴(X轴)的转动惯量最小,绕短轴(Y轴)的转动惯量居中,而绕垂直于屏幕的轴(Z轴)的转动惯量最大。 (这里的“长”和“短”指的是手机屏幕的长度和宽度。)

现在来聊聊稳定性。物体的旋转稳定性,和它围绕某个轴旋转时的角速度变化以及惯性张力有关。更通俗地说,想象一下你手里拿着一个旋转的东西,如果它稍微偏离了原来的旋转状态,它会不会越转越偏,最终翻滚失控,还是会自己稍微调整一下,回到一个稳定的状态?

物理学告诉我们,一个刚体围绕其主轴旋转的稳定性,取决于该主轴的转动惯量与其他两个主轴的转动惯量大小的关系。

最大转动惯量轴和最小转动惯量轴是稳定的:当你围绕这两个轴旋转物体时,如果它受到一点点的扰动,比如轻微的倾斜,它会倾向于通过调整角度来恢复到原来的旋转状态。这就像你把一个平放的鸡蛋立起来再稍微晃一下,它可能会倒下,但如果你让它稳定地原地打转,稍微晃一下,它会尝试回到原状。
中等转动惯量轴是不稳定的:如果你尝试让物体围绕中等转动惯量的主轴旋转,并且给它一点点扰动,它会变得非常不稳定,很容易出现“翻滚”现象,也就是突然改变旋转方向,开始围绕另一个更稳定的主轴旋转。这就像你尝试让一个旋转的飞盘的中心线(中等惯量轴)保持不变,稍微一歪,它就会开始侧倾,最终可能变成绕着更稳定的某个轴在转。

那么具体到手机上:

1. 绕长轴(X轴)旋转是稳定的:想象一下,你握着手机,让它像一个细长的棍子一样围绕它的长度方向旋转。这时,它的转动惯量相对较小,而且在这个方向上,质量相对比较均匀地分布在轴的两侧。稍微有点晃动,它也能相对容易地保持住。
2. 绕短轴(Y轴)旋转是不稳定的:如果你尝试让手机围绕着它的宽度方向旋转,就像让它绕着一个短边互相穿过然后旋转。这个轴的转动惯量是中等的。如果你给它一点点角度上的扰动,它就会开始出现不稳定的翻滚,很容易从这个旋转状态切换到围绕长轴或者垂直于屏幕的轴旋转。
3. 绕垂直于屏幕的轴(Z轴)旋转是稳定的:这是最常见的手机旋转方式,就像你转动手机让它原地打圈。这个轴的转动惯量通常是最大的,因为它涉及到让手机大部分的质量(屏幕、电池等)都绕着这个轴转动。在这种情况下,物体的转动惯量也提供了一种“惯性抗拒”,使得它在受到扰动时更容易恢复到原来的状态。

所以,手机能稳定地围绕它的长轴和垂直于屏幕的轴旋转,而围绕短轴旋转时则会变得不稳定,很容易出现翻滚,最终倾向于围绕其他两个更稳定的轴来旋转。这就解释了为什么我们用手机时,绕着某个轴转动会感觉它“不听使唤”,会突然改变旋转方式。这背后就是物体转动惯量的差异在起作用。

你可以自己试一试,拿起一部手机(不用太贵的,随便一个就行),尝试让它绕着长边方向转,再尝试绕着短边方向转,你会明显感觉到围绕短边转动时更难控制,而且它自己也更容易“翻过来”去转动。这种现象也叫“雅科比翻转”(Jacobian flip)或者更广义的“欧拉绕轴不稳定性”。

网友意见

user avatar

这是刚体转动中一个非常著名的现象,网球拍效应(Tennis Racket Theorem)。不清楚情况的读者可以先看看下面的视频

https://www.zhihu.com/video/1016382059736158208
来源:youtube.com/watch?

为什么这个钢件好好的转着转着,一下子就翻过来了?然后又给翻回去了?

我们再来看看一个更详细的短片

https://www.zhihu.com/video/1016382115360948224
来源:youtube.com/watch?

一副扑克牌,绕着最长的轴自转是稳定的,绕着最短的轴自转也是稳定的,偏偏就是绕着中间那根轴转着转着会翻过来,也就是题主所描述的现象了【讲实话我想看看题主的手机现在是个什么情况,还是说用诺基亚来做的实验?


这个现象背后的原理是什么呢?最常见的解释是基于固着在刚体上的坐标架讨论的,这需要读者具备对角动量和转动惯量张量的基本认识:

取刚体的三个惯量主轴为x, y, z轴,相应的转动惯量为 ,角动量分量为 。那么整个刚体的转动动能为

其等值面在角动量空间中构成了一个椭球面,三个主轴分别为 。

对于自由转动的刚体,其角动量矢量 是一个守恒量。但是我们现在在刚体坐标架上考虑问题,那么其方向相对于这个坐标架便不再是一个常量,但 的大小依旧守恒。即我们可以写出

这是角动量空间中的一个球面。那么剩下的便是考虑球面和椭球面相交的问题了。我们可以作出一个椭球面,然后画出半径不同的球面与它的交线:

对于刚体绕某一个惯量主轴旋转的情况,在角动量空间中显然它们都位于椭球面与坐标轴的交点处。这时设想刚体的转动方向相对于转动主轴有那么一点点偏离,对于绕 z 轴或 x 轴转动的情形,从图中可以看到极点附近有一圈等值线,这意味着角动量将绕着这个轴旋转,也就是说刚体在稳定的作进动。而对于绕 y 轴旋转的情形,此处明显对应于曲面上的一个鞍点,并不存在绕这一点的等值线;稍微偏离一点点就会刷的一下绕到另一头去再绕回来,周而复始,也即我们在视频中看到的情况。


上面的解释在物理图像上是非常清晰的,可惜需要用到刚体动力学的一些概念。能不能直接从简单的受力分析来得到这个结果呢?著名网红数学家 特仑苏·陶 在爆栈网上有一个回答,给出了一个详(luo)细(suo)的解释,这里作简要翻译:

One can see this effect qualitatively from Newtonian first principles (as opposed to Hamiltonian or Lagrangian principles) by looking at a degenerate case, when one moment of inertia is very small and the other two are very close to each other.

通过对一个退化情形:三个主转动惯量中有一个很小,而另外两个很接近 的讨论,我们能从牛顿定律出发(而不是哈密顿力学或拉格朗日力学)来定性理解这个现象

More specifically, consider a thin rigid unit disk, initially oriented in the xy plane and centred at the origin (0,0,0). We make the "spherical cow" hypotheses that this disk has infinitesimal thickness and mass, but infinite rigidity. On this disk, we place heavy point masses of equal mass M at the points (1,0,0) and (-1,0,0), and light point masses of equal mass m at the points (0,1,0) and (0,-1,0). Here 0<m<<M, i.e. m should be viewed as negligible with respect to M. (The moments of inertia are then 2m,2M,2(m+M), though we will not explicitly use these moments in the analysis below.)

具体来说,考虑一个薄的刚体圆盘,初态位于xy平面上,中心位于(0,0,0)。使用球形牛假设(是真空中的球形鸡的梗么...),即盘无限薄,无限轻且足够坚硬。在盘上,我们分别将两个质量为M的重质点固着于(1,0,0),(-1,0,0),两个质量为m的轻质点固着于(0,1,0),(0,-1,0)。这儿有 0<m<<M,即m相对m可以忽略。(其惯量张量为2m,2M,2(m+M),在下面的分析中我们不会显式地使用这些量)

We now set up the unstable equilibrium by rotating the disk around the y axis. Thus, the light m-masses stay fixed, while the heavy M-masses rotate in the xz plane. This is in equilibrium: there are no net forces on the m-masses, while the rigid disk exerts a centripetal force on the M-masses that keeps them moving in a circular motion on the xz plane.

考虑一个不稳定的平衡态:盘绕着y轴旋转。这样,轻质点m平衡的停在那里,而重质点M在xz平面旋转。这是一个平衡态:m没有受到净的作用力,而刚体盘给重质点提供向心力使他们绕着xz平面做圆周运动

We can view this equilibrium in rotating coordinates, matching the motion of the M-masses. (Imagine a camera viewing the disk, rotating around the y-axis at exactly the same rate as the disk is rotating.) In this rotating frame, the disk is now stationary (so the m-masses are stuck at (0,±1,0) and the M-masses are stuck at (±1,0,0)), but there is a centrifugal force exerted on all bodies proportional to the distance to the y-axis. The m-masses are on the y-axis and thus experience no centrifugal force; but the M-masses are away from the y-axis and thus experience a centrifugal force, which is then balanced out by the centripetal forces of the rigid disk.

我们可以在转动坐标架中考察这个平衡,即跟上M质点的运动(考虑一个绕着y轴以相同角速度旋转的摄像头正对着圆盘)。在转动系中,圆盘是静态的(因此质点m固着在(0,±1,0),而质点M固着在(±1,0,0)),但是有一个与到y轴距离成正比的离心力施加在所有物体上。m位于y轴上因此不会受到离心力;但M由于离轴而受到一个被刚体盘的张力平衡掉的离心力。

Now let us perturb the disk a bit, so that the m-masses and M-masses are knocked a little bit out of position (but keeping the centre of mass fixed at (0,0,0)). In particular, the m-masses are knocked away from the y-axis and now experience a little bit of centrifugal force. On the other hand, the rigid disk forces the light m-masses to remain orthogonal to the heavy M-masses, by exerting tension forces between the masses. In the regime where m is negligible compared to M, these tension forces will barely budge the heavy M masses (which therefore remain essentially fixed at (±1,0,0) in the rotating frame), so the effect of these tension forces is to constrain the m-masses to lie in the yz plane (up to negligible errors which we now ignore). Rigidity also keeps the m-masses at a unit distance from the origin, and antipodal to each other, so the m-masses are now constrained to be antipodal points on the unit circle in the yz plane. However, other than this, rigidity imposes no further constraints on the location of the m-masses, which can then move freely as antipodal points in this unit circle.

现在让我们给盘一个微扰,使得M,m都离开平衡位置一点点(但质心仍然保持在(0,0,0)不动)。一方面,轻质点m会由于偏离y轴一点点而受到一点离心力。另一方面,刚性圆盘通过张力使得两m间的连线仍然与两M间的连线正交,由于m远小于M,这些张力几乎挪不动两重质点M(因而在转动坐标下M基本维持在(±1,0,0)的位置上),所以这些张力的作用是将m质点限制在yz平面内(至多有一些可忽略的误差)。刚体也使得质点m到原点的距离始终为1,并使得两质点关于坐标原点对称。所以说两质量为m的质点被限制为yz平面上一个单位圆上的一对对称点。然而,除此之外,刚体没有给两轻质点m的位置加进一步的约束,即它们可以作为单位圆上的一对对称点自由运动。

The effect of centrifugal force in the rotating frame is now clear: if an m-mass (and its antipode) is perturbed to be a little bit off the y-axis in this unit circle with no initial velocity, then centrifugal force will nudge it a little further off the y-axis, slowly at first but with inexorable acceleration. Eventually it will shoot across the unit circle and then approach the antipode of its previous position. At this point the centrifugal forces act to slow the m-masses down, reversing all the previous acceleration, until one ends up with no velocity at a small distance from the antipode. The process then repeats itself (imagine a marble rolling frictionlessly between two equally tall hills, starting from a position very close to the peak of one of the hills).

现在,在转动坐标架中,离心力的影响很明确了:当一个质点m(和它的对称点)受到了一个沿着单位圆偏离y轴的小位置扰动(没有初速度),离心力将会把它进一步拉离y轴,开始很慢但必然会加速。最终它将穿过半个单位圆并到达与其初始位置相对的地方。在这一点离心力将会给质点m减速,抵消之前的加速过程,直到接近初始位置的对称点时速度降为零。这个过程将会不断重复(想象一颗在两座同样高的小山间无摩擦滚动的球,从一个非常接近一座山的山顶的位置出发)。


这里给出陶所述的模型在几种情况下的动画演示

绘图代码(四年前写的东西就别吐槽了)

                         [         Gamma         ]                   =                   10         ;         (*质量比*)                                     [         Beta         ]                   =                   -0.01         /         (                  [         Gamma         ]                   +                   1         )                   +                   1.01         /                  [         Gamma         ];         (*2E I_1/L^2*)                            s                   =                   Sqrt         [(         1                   -                            [         Beta         ])         /                  [         Gamma         ]         /         (                  [         Gamma         ]                   +                   1         )];                            m                   =                   (                  [         Gamma         ]                   -                   1         )                   (                  [         Beta         ]                   (                  [         Gamma         ]                   +                   1         )                   -                   1         )         /         (         1                   -                            [         Beta         ]);                                     [         CapitalOmega         ]         1         [         t_         ]                   :=                            Re         [         Sqrt         [(                  [         Beta         ]                   (                  [         Gamma         ]                   +                   1         )                   -                   1         )         /                  [         Gamma         ]]                   JacobiCN         [         s                   t         ,                   m         ]];                                     [         CapitalOmega         ]         2         [         t_         ]                   :=                            Re         [         Sqrt         [(                  [         Beta         ]                   (                  [         Gamma         ]                   +                   1         )                   -                   1         )         /                  [         Gamma         ]]                   JacobiSN         [         s                   t         ,                   m         ]];                                     [         CapitalOmega         ]         3         [         t_         ]                   :=                            Re         [         Sqrt         [(         1                   -                            [         Beta         ])         /                  [         Gamma         ]         /         (                  [         Gamma         ]                   +                   1         )]                   JacobiDN         [         s                   t         ,                   m         ]];                                     [         Theta         ][         t_         ]                   :=                   ArcCos         [(                  [         Gamma         ]                   +                   1         )                            [         CapitalOmega         ]         3         [         t         ]];                                     [         Psi         ][         t_         ]                   :=                   Which         [                                     [         CapitalOmega         ]         1         [         t         ]                   >=                   0                   &&                            [         CapitalOmega         ]         2         [         t         ]                   >                   0         ,                            ArcTan         [                  [         CapitalOmega         ]         1         [         t         ]         /                  [         Gamma         ]         /                  [         CapitalOmega         ]         2         [         t         ]],                                     [         CapitalOmega         ]         1         [         t         ]                   <                   0                   &&                            [         CapitalOmega         ]         2         [         t         ]                   >=                   0         ,                            2                            [         Pi         ]                   +                   ArcTan         [                  [         CapitalOmega         ]         1         [         t         ]         /                  [         Gamma         ]         /                  [         CapitalOmega         ]         2         [         t         ]],                                     [         CapitalOmega         ]         1         [         t         ]                   <                   0                   &&                            [         CapitalOmega         ]         2         [         t         ]                   <                   0         ,                            [         Pi         ]                   +                            ArcTan         [                  [         CapitalOmega         ]         1         [         t         ]         /                  [         Gamma         ]         /                  [         CapitalOmega         ]         2         [         t         ]],                            True         ,                            [         Pi         ]                   +                            ArcTan         [                  [         CapitalOmega         ]         1         [         t         ]         /                  [         Gamma         ]         /                  [         CapitalOmega         ]         2         [         t         ]]                            ];                            (*[Phi][t_]:=NIntegrate[([CapitalOmega]1[[Tau]]^2+[Gamma]           [CapitalOmega]2[[Tau]]^2)/([CapitalOmega]1[[Tau]]^2+[Gamma]^2           [CapitalOmega]2[[Tau]]^2),{[Tau],0,t}];*)                            T                   =                   4                   Re         [         EllipticK         [         m         ]]         /         s         ;                            (*函数的定义*)                            dt                   =                   T         /         64         ;                            tlist                   =                   Table         [(         i                   -                   1         /         2         )                   dt         ,                   {         i         ,                   1         ,                   4                   T         /         dt         }];                             angle                   =                   Table         [{         0         ,                            [         Theta         ][         t         ],                            [         Psi         ][         t         ]},                   {         t         ,                   tlist         }];                             Do         [                            angle         [[         i         ,                   1         ]]                   =                   angle         [[         i                   -                   1         ,                   1         ]]                   +                   dt                   ((                  [         CapitalOmega         ]         1         [                   tlist         [[         i         ]]]         ^         2                   +                            [         Gamma         ]                            [         CapitalOmega         ]         2         [                   tlist         [[         i         ]]]         ^         2         )         /         (                  [         CapitalOmega         ]         1         [                   tlist         [[         i         ]]]         ^         2                   +                            [         Gamma         ]         ^         2                            [         CapitalOmega         ]         2         [                   tlist         [[         i         ]]]         ^         2         )                   +                   (                  [         CapitalOmega         ]         1         [                   tlist         [[         i                   -                   1         ]]]         ^         2                   +                            [         Gamma         ]                            [         CapitalOmega         ]         2         [                   tlist         [[         i                   -                   1         ]]]         ^         2         )         /         (                  [         CapitalOmega         ]         1         [                   tlist         [[         i                   -                   1         ]]]         ^         2                   +                            [         Gamma         ]         ^         2                            [         CapitalOmega         ]         2         [                   tlist         [[         i                   -                   1         ]]]         ^         2         ))                   ,                             {         i         ,                   2         ,                   Length         [         angle         ]}]                             (*数据的计算*)                             file                   =                   Table         [                             Graphics3D         [{         GeometricTransformation         [{                             Gray         ,                   Cylinder         [{{         0         ,                   0         ,                   -0.02         },                   {         0         ,                   0         ,                   0.02         }},                   1         ],                             Red         ,                   Sphere         [{         1         ,                   0         ,                   0         },                   0.15         ],                   Sphere         [{         -1         ,                   0         ,                   0         },                   0.15         ],                             Green         ,                   Sphere         [{         0         ,                   1         ,                   0         },                   0.05         ],                   Sphere         [{         0         ,                   -1         ,                   0         },                   0.05         ],                             Blue         ,                   {         Arrow         [{{         -1.15         ,                   0         ,                   0         },                   {         1.15         ,                   0         ,                   0         }}],                   Arrow         [{{         0         ,                   -1.15         ,                   0         },                   {         0         ,                   1.15         ,                   0         }}],                   Arrow         [{{         0         ,                   0         ,                   -1.15         },                   {         0         ,                   0         ,                   1.15         }}]}                   },                             {         RotationMatrix         [         -         angle         [[         i         ,                   1         ]],                   {         0         ,                   0         ,                   1         }]         .         RotationMatrix         [         -         angle         [[         i         ,                   2         ]],                             {         1         ,                   0         ,                   0         }]         .         RotationMatrix         [         -         angle         [[         i         ,                   3         ]],                   {         0         ,                   0         ,                   1         }],                   {         0         ,                   0         ,                   0         }}],                             {         Line         [{{         -1.15         ,                   0         ,                   0         },                   {         1.15         ,                   0         ,                   0         }}],                   Line         [{{         0         ,                   -1.15         ,                   0         },                   {         0         ,                   1.15         ,                   0         }}],                   Line         [{{         0         ,                   0         ,                   -1.15         },                   {         0         ,                   0         ,                   1.15         }}]}}                   ,                             Boxed                   ->                   False         ,                   ImageSize                   ->                   500         ]                             ,                   {         i         ,                   1         ,                   Length         [         angle         ]}];                             ListAnimate         [         file         ,                   AnimationRate                   ->                   8         ]                             (*动画生成*)            

参考资料:

刘川,理论力学 【我最早得知这个现象就是在川哥的课上,而且我说这篇文章最早是理力期末前两天我划水写在人人网上的你信不信【手动斜眼

刘延柱,趣味刚体动力学,2.2节中利用这个原理解释了体操运动中的旋空翻动作

维基页面 Tennis racket theorem 这里有一幅动图很好的演示了椭球面和球面的相交

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有