Geometry

atcoder/extra/geometry/geometry is a friendly facade module for two-dimensional geometry utilities.

See also Geometry Guide for a guided overview.

It re-exports geometry_template, polygon, closest_pair, triangle, and tangent, and adds readable constructors and aliases.

Import

import atcoder/extra/geometry/geometry

Re-export

This module re-exports:

import atcoder/extra/geometry/geometry_template
import atcoder/extra/geometry/closest_pair
import atcoder/extra/geometry/polygon
import atcoder/extra/geometry/triangle
import atcoder/extra/geometry/tangent

Type aliases

Definition

type Point2[Real] = Point[Real]
type Line2[Real] = Line[Real]
type Segment2[Real] = Segment[Real]
type Circle2[Real] = Circle[Real]
type Polygon2[Real] = Polygon[Real]

Friendly constructors

Definition

proc point[Real](x, y: Real): Point[Real]

proc line[Real](a, b: Point[Real]): Line[Real]
proc line[Real](A, B, C: Real): Line[Real]

proc segment[Real](a, b: Point[Real]): Segment[Real]

proc circle[Real](center: Point[Real], radius: Real): Circle[Real]
proc circle[Real](a, b, c: Point[Real]): Circle[Real]

Friendly operations

Definition

proc dist[Real](a, b: Point[Real]): Real
proc dist[Real](l: Line[Real], p: Point[Real]): Real
proc dist[Real](s: Segment[Real], p: Point[Real]): Real
proc dist[Real](a, b: Segment[Real]): Real

proc intersects[Real](a, b: Line[Real]): bool
proc intersects[Real](a, b: Segment[Real]): bool

proc intersection[Real](a, b: Line[Real]): Point[Real]
proc intersection[Real](a, b: Segment[Real]): Point[Real]

Example

let  a = point(0.0, 0.0)  b = point(2.0, 2.0)  c = point(0.0, 2.0)  d = point(2.0, 0.0)let  l1 = line(a, b)  l2 = line(c, d)  s1 = segment(a, b)  s2 = segment(c, d)doAssert intersects(l1, l2)doAssert intersects(s1, s2)let p = intersection(l1, l2)doAssert p.re == 1.0doAssert p.im == 1.0