1.概述

有几种方法可以确定多边形点列表是顺时针排列还是逆时针排列。

在本教程中,我们将创建一个简单的算法来确定多边形点的方向。此外,我们将修正和使用一些公式的面积计算。我们假设有基本的知识多边形的基本定义线性代数

2.多边形点的顺序

让我们回忆一下多边形存储在内存中的方式。假设P是我们的多边形。它由n点。因此,我们可以代表\ boldsymbol {P}作为P = (P_{0}, P_{1},…), P_{n - 1})},在那里\粗体符号{P_{i} = (x_{i}, y_{i})}.所以形状P表示为点的列表。

我们还将定义另一个多边形P^{'} = (P_{n - 1}, P_{n - 2},…, P_ {0}).值得注意的是,它包含了相同的点,但顺序相反。PP ^”是两个不同的多边形,它们看起来完全相同,有着相同的形状和面积。

它们之间的区别在于它们的点方向。如果点在P是顺时针方向,然后点方向在里面P ^”是逆时针的,反之亦然:

我们将在教程中进一步使用这些关于点方向的信息。金宝搏官网188be此外,如前所述,等领域的\ boldsymbol {P}\ boldsymbol {P ^ '}数值相等,但区域符号不同。

3.面积计算

有一个简单的线性时间算法2 d多边形面积计算。该算法引入了一个面积公式。我们将简要讨论多边形面积计算的关键方面,以及在我们的点定位算法中使用这个公式。

形状的面积可以是正的,也可以是负的。如果形状被表示为一个点列表,那么它取决于点的方向。让我们简单地回忆一下计算三角形和多边形面积的公式。

3.1.三角形面积

现在让我们假设一个三角形T_ {ABC}识别是由3点定义的吗(间的{1},y_ {1})y_ B(间的{2},{2}),y_ C(间{3},{3})

这个三角形的面积可以用线性代数中的一个简单公式来计算:S_ {T} = 1 / 2 * \ {vmatrix}开始B - A和C - \结束{vmatrix} = 1 / 2 * \ {vmatrix}开始间的{2}-间的{1}&间{3}-间的{1}\ \ y_ {2} - y_ {1} & y_ {3} - y_ {1} \ {vmatrix}结束= 1 / 2 *((间的{2}-间的{1})* (y_ {3} - y_{1})——(间{3}-间的{1})* (y_ {2} - y_ {1}))

如果我们移动三角形,使之指向一个一个(0,0),则三角形的面积不变:

但面积的计算公式会稍微简化一些:

S_{T} = 1 / 2 * \begin{vmatrix}1 / 2 * \ {vmatrix}开始间的{2}- 0 &间{3}- 0 \ \ y_ {2} - 0 & y_{3} - 0结束\ {vmatrix}= 1 / 2 * (x_{2} * y_{3} - x_{3} * y_{2})

3.2.多边形的面积

现在我们可以用三角形面积的公式来计算多边形的面积。这种方法的思想很简单。它使用分解技术。我们可以把的多边形分解n指出n三角形。为了做到这一点,我们选择任意点Z,通常是Z = Z(0,0)

之后,我们可以计算n三角形。假设我们有一个用集合表示的多边形nP_ {P_{0},{1},…, P_{n - 1}}.我们通过选取点来组成一个三角形ZP{我},P_ {i + 1}我\ mod nforall I in{0,1,…, n - 1}.然后我们把所有的面积加起来,得到整个多边形的面积。

计算多边形面积的最后一个公式是:

S_{多边形}= 1 / 2 \ \ sum_ {i = 0} ^ {n - 1}(间{我}* y_ {i + 1} - y_{我}*间{i + 1}),在那里V_ {i} = (x_{i}, y_{i})我\ mod n

重要的是要记住多边形的面积可以是正的也可以是负的。它取决于所选择的分解点和顶点的顺序。

4.算法

让我们定义一个简单的符号函数征(x).它取一个任意的数x作为参数,并只返回三个值。如果x < 0征(x) = 1.如果x > 0征(x) = 1.最后,如果x = 0征(x) = 0.我们可能会注意到这个函数给我们关于数字符号的信息金宝搏官网188be

下面介绍一种求多边形点方向的算法P = (p_ {0}, p_{1},…, P_{n - 1}).首先,我们用上面的公式计算带符号的面积,得到数字S_{多边形}.第二,我们计算\ω=符号(S_{多边形}).最后,我们比较\ω与零。如果\ω> 0,点的方向是逆时针的。

类似地,如果\ω< 0,则点的方向为顺时针。我们也没料到会发生这种情况\ω= 0.这意味着多边形的面积是0。在这种情况下,很可能是多边形没有正确定义。

5.时空复杂性

上述算法的时间复杂度为\ boldsymbol {O (n)},在那里n为多边形的点数。计算面积需要线性时间。在那之后,它O (1)是时候了解这个区域是积极的还是消极的。因此,最后的复杂性是O(n) + O(1) = O(n)

空间复杂度是\ boldsymbol {O (1)}因为我们只需要一个变量来存储面积。

6.结论

在本文中,我们介绍了一种算法,帮助确定多边形点的方向在线性时间。此外,我们还回顾了一种计算多边形面积的简单方法。还有其他一些确定点方位的技术;然而,所有这些都是基于这个简单的想法。

这篇文章的评论已经关闭!