自由度视角下的平面与立体几何
自由度是一个物理中非常常见的概念，指的是描述一个系统所需的独立参数个数。在工程上，这个概念常用于描述机械的运动，以确定完全控制一个机械的姿态需要几个独立的驱动。最近在学习 solidworks 的时候，在草图定义、零件定义这里，又一次遇到了自由度的问题：草图和零件上要如何增加几何约束才能完全确定？再加上最近同时又温习了一部分中考的平面几何题，于是把最近的感悟总结在这里。自由度与约束的关系很简单：每引入一个独立约束方程，就减少一个自由度，或者说，新自由度 = 原自由度 - 独立约束数量。例如说，空间中的一个点，确定它就需要3个独立参数（例如，可以用直角坐标  或者球坐标  来描述），于是点有3个自由度；而我们如果给它的位置加一个限制，例如要求它与原点的距离为1，相当于限制参数满足方程 ，此时点只能在一个球面上运动，描述这个点也只需要2个独立参数了（例如经度和纬度 ），因此点的自由度为2；如果我们再加一个限制，让它只能在  平面上运动（相当于限制参数满足方程 ），此时点只能在一个圆上运动，描述这个点也只需要一个参数（例如经度 ）这个关系简单直观，但是数学上的严格证明也是比较困难的。如果所有的约束都是线性方程，那么用线性代数中方程组的定理：解空间的维数 = 变量数 - 系数矩阵的秩，可以解释这个关系。这里变量数就是原来的自由度，系数矩阵的秩就体现为独立约束的数量，因为一个方程组（也就是多个约束）中有些方程可能是多余的（也即，这些方程线性相关），去掉后不影响原来线性方程组的解，我们真正关心的是最大的线性无关方程数。（对于非线性的情况，可能要引入流形等知识点，我也不会我就不阐述了（逃平面上，直线的自由度是 2；空间中，直线的自由度是 4，平面的自由度是 3证明：确定一个直线后，其上的任意点都可以由一个参数确定（弧坐标/直线参数方程），于是可以再用2个独立参数确定2个点，结合直线的任意性，以及两点确定一条直线，可知2点的自由度=直线的自由度+2（两个独立参数），于是平面直线的自由度=4-2=2，空间则为4同理，可以用三点确定一个平面+点坐标的任意性，推知平面的自由度=3×3-3×2=3这并不难理解，比如我们经常用斜截式方程  描述平面直线（除去平行于  轴的），这里的参数  就是两个独立参数；同样地，我们用截距式方程  描述空间平面，也体现了3个自由度。方向是描述直线、平面朝向的概念，可以用方向向量（或法向量）描述，而方向向量有用的信息只有它的方向，长度是无关信息，因此可以把方向向量单位化（令其长度为1）。平面内，一个方向的自由度是1，空间中则是2。射线比起直线，多确定了一个点，自由度是直线+1（平面3，空间5）线段只需由两个端点确定，于是平面4，空间6（也可以理解为射线自由度+1）平面上，圆可以由圆心坐标（2参数）和半径确定，自由度是3；而空间中，除了半径，圆心要用3个参数描述，还需要确定圆所在的平面的方向（2参数），所以自由度是6还有很多其他几何体，都可以用类似地方法，直接思考它们需要几个自由度来确定（待补充）有时候我们需要在几何体上添加一些几何约束。常见的约束如直接定义线段长度、角度、距离等，或者直接定义相等关系如线段等长、等角，这种都是引入了一个约束方程，减少一个自由度，就不过多阐述了。下面主要说说一些其他的约束。平面线线平行：等价于两条直线的方向相同，本来两条直线的方向任意，有两个自由度，现在两条直线方向相等，只要一个方向就可以描述了，减少1个自由度。从解析几何角度来看，我们可以把直线设为  ，平行就是斜率相等，  ，这是一个约束方程，减少了一个自由度。空间线线平行：等价于两条直线的方向相同，减少2个自由度。线面平行：等价于直线的方向向量和平面的法向量内积为0，减少1个自由度。面面平行：等价于两个平面的方向相同，或者说单位法向量相同（或等大反向），减少2个自由度。线线垂直：等价于两个方向向量垂直，即内积为0，这是一个约束方程，减少1个自由度。线面垂直：相当于直线的方向向量与平面的法向量平行，减少2个自由度。（也可以这样思考：首先任取一个平面，这个平面有 3 个自由度；固定这个平面，与它垂直的直线可以用直线与平面的交点唯一描述，而平面上一点的自由度是 2，所以总共只有 5 个自由度，约束数 = 7 - 5 = 2）面面垂直：相当于两法向量垂直，内积为0，减少1个自由度。高中的时候，我们有接触到立体几何的八大定理（有用的其实就6个，面面平行、线面垂直的性质定理是来凑数的，它们自己的定义本身就很有用），大家可能也隐隐约约感受到不同的关系对于图形的“约束力”是不一样的，运用自由度和约束的观点就能进一步揭示这一现象。例如，我们以面面垂直性质定理为例：相比于线面垂直（线垂直于面内任一线），面面垂直的性质我们感觉“弱”一些，需要引入  这一“额外条件”才能得出线面垂直。从自由度与约束的角度，面面垂直只减少一个自由度（提供一个独立约束），而线面垂直减少了两个自由度。从这个角度可以说，面面垂直的约束力是不够的，我们还需要再引入一个平面内的线线垂直，才能提供足够的约束来固定住这条直线。同样地，线面平行推出线线平行，也需要引入一个额外的自由度。