📜  如果不超过两点共线,则平面中的三角形数(1)

📅  最后修改于: 2023-12-03 15:38:58.092000             🧑  作者: Mango

如果不超过两点共线,则平面中的三角形数

在平面直角坐标系中,三点不共线时,可以构成一个三角形。但是如果有多个点共线,就无法构成三角形了。

考虑这样一个问题:如果有 $n$ 个不共线的点,那么它们可以构成多少个三角形呢?

在计算这个问题之前,我们先了解一下“组合数”的概念。组合数 $C_n^m$ 表示从 $n$ 个不同的元素中选出 $m$ 个元素的选法数,其计算公式为:

$$C_n^m=\frac{n!}{m!(n-m)!}$$

根据数学原理,三角形的三个顶点必须不共线。要计算平面上 $n$ 个不共线的点所组成的三角形数,可以考虑对每个点进行配对。

以 $n=6$ 为例,对这 $6$ 个点进行配对,可以得到如下的情况:

(1)A-B-C 的情况:$1$ 种

(2)A-B-D/E/F 的情况:$3$ 种

(3)A-C-D/E/F 的情况:$3$ 种

(4)B-C-D/E/F 的情况:$3$ 种

(5)D-E-F 的情况:$1$ 种

根据组合数的概念,对于每个配对情况,可以计算出可以构成的三角形数量。比如对于情况(2),可以构成 $\large C_3^2$ 个三角形;对于情况(1),可以构成 $\large C_3^3$ 个三角形。

因此,总共可以构成的三角形数量为:

$$\underline{C_n^2-\sum_{i=1}^n C_i^2}$$

对于这个公式,其实可以进行简化。由于 $\large C_n^0=1$,因此可以将 $C_n^2$ 拆成 $C_n^0+C_n^1+C_n^2$。然后进行一些计算和化简,可以得到下面的公式:

$$\underline{\frac{n(n-1)(n-2)}{6}}$$

下面是一个Python函数实现:

def count_triangles(n):
    """
    计算平面上给定数量的点所能构成的三角形数
    :param n: 点的数量
    :return: 三角形数
    """
    if n < 3:
        return 0
    return n * (n - 1) * (n - 2) // 6 - sum([i * (i - 1) // 2 for i in range(1, n)])

注意,在计算 $\sum_{i=1}^n C_i^2$ 时,可以使用公式 $\large\sum_{i=1}^n C_i^2=\frac{n(n+1)(2n+1)}{6}$,这样就不用循环计算了。