Polygon

polygon は、二次元 polygon に対する基本操作を提供します。

凸性判定、凸包、点包含判定、面積、凸多角形の直径などを扱えます。

import

import atcoder/extra/geometry/geometry_template
import atcoder/extra/geometry/polygon

型

type Polygon[Real] = seq[Point[Real]]

polygon は点列として表されます。

定義

proc isConvex[Real](p: Polygon[Real]): bool
proc convexHull[Real](p: Polygon[Real], strict = false): Polygon[Real]
proc convex_cut[Real](p: Polygon[Real], l: Line[Real]): Polygon[Real]
proc convex_diameter[Real](p: Polygon[Real]): Real

type State = enum
  OUT
  ON
  IN

proc contains[Real](p: Polygon[Real], q: Point[Real]): State
proc area[Real](p: Polygon[Real]): Real
proc area[Real](p: Polygon[Real], c: Circle[Real]): Real

使用例

let square: Polygon[float] = @[  initPoint[float](0.0, 0.0),  initPoint[float](2.0, 0.0),  initPoint[float](2.0, 2.0),  initPoint[float](0.0, 2.0),]doAssert area(square) == 4.0doAssert contains(square, initPoint[float](1.0, 1.0)) == State.INdoAssert contains(square, initPoint[float](2.0, 1.0)) == State.ONdoAssert contains(square, initPoint[float](3.0, 1.0)) == State.OUT

計算量