Unverified Commit 3e1600de authored by Xeonacid's avatar Xeonacid Committed by GitHub
Browse files

Merge pull request #2632 from ksyx/patch-26

refactor: 2 files in geometry
parents 1357bea1 9b77ca14
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@
    stk[++tp] = 1;
    //栈内添加第一个元素,且不更新 used,使得 1 在最后封闭凸包时也对单调栈更新
    for (int i = 2; i <= n; ++i) {
      while (tp >= 2  // 下一行*被重载为叉积
      while (tp >= 2  // 下一行 * 操作符被重载为叉积
             && (p[stk[tp]] - p[stk[tp - 1]]) * (p[i] - p[stk[tp]]) <= 0)
        used[stk[tp--]] = 0;
      used[i] = 1;  // used 表示在凸壳上
@@ -61,10 +61,10 @@
    int ans = tp - 1;
    ```

根据上面的代码,最后凸包上有 $ans$ 个元素(额外存储了 $1$ 号点,因此 $h$ 数组中有 $ans+1$ 个元素),并且按逆时针方向排序。周长就是
根据上面的代码,最后凸包上有 $\textit{ans}$ 个元素(额外存储了 $1$ 号点,因此 $h$ 数组中有 $\textit{ans}+1$ 个元素),并且按逆时针方向排序。周长就是

$$
\sum_{i=1}^{ans}\left|\overrightarrow{h_ih_{i+1}}\right|
\sum_{i=1}^{\textit{ans}}\left|\overrightarrow{h_ih_{i+1}}\right|
$$

### 例题
+5 −6
Original line number Diff line number Diff line
## Pick 定理

Pick 定理:给定顶点坐标均是整点(或正方形格子点)的简单多边形,皮克定理说明了其面积 ${\displaystyle A}$ 和内部格点数目 ${\displaystyle i}$ 、边上格点数目 ${\displaystyle b}$ 的关系: ${\displaystyle A=i+{\frac {b}{2}}-1}$ 。
Pick 定理:给定顶点均为整点的简单多边形,皮克定理说明了其面积 ${\displaystyle A}$ 和内部格点数目 ${\displaystyle i}$ 、边上格点数目 ${\displaystyle b}$ 的关系: ${\displaystyle A=i+{\frac {b}{2}}-1}$ 。

具体证明: [Pick's theorem](https://en.wikipedia.org/wiki/Pick%27s_theorem) 

@@ -17,14 +17,13 @@ Pick 定理:给定顶点坐标均是整点(或正方形格子点)的简单

给一个平面上的简单多边形,求边上的点,多边形内的点,多边形面积。

### Solution
### 题解

这道题目其实用了以下三个知识:

-格子点为顶点的线段,覆盖的点的个数为 $\gcd(dx,dy)$ ,其中, $dx,dy$ 分别为线段横向占的点数和纵向占的点数。如果 $dx$ 或 $dy$ 为 $0$ ,则覆盖的点数为 $dy$  **或**  $dx$ 。
- Pick 定理:平面上以格子点为顶点的简单多边形的面积 = 边上的点数/2 + 内部的点数 + 1。
-点为顶点的线段,覆盖的点的个数为 $\gcd(\textit{dx},\textit{dy})$ ,其中, $\textit{dx},\textit{dy}$ 分别为线段横向占的点数和纵向占的点数。如果 $\textit{dx}$ 或 $\textit{dy}$ 为 $0$ ,则覆盖的点数为 $\textit{dy}$  **或**  $\textit{dx}$ 。
- Pick 定理:平面上以点为顶点的简单多边形的面积 = 边上的点数/2 + 内部的点数 + 1。
- 任意一个多边形的面积等于按顺序求相邻两个点与原点组成的向量的叉积之和(这个也可以通过顺时针定积分求得)。
     于是这题就愉快地做完了

```cpp
#include <cmath>