Tangent

tangent provides helpers for tangents related to circles.

It can compute tangent points from an external point to a circle and common tangent lines of two circles.

Import

import atcoder/extra/geometry/geometry_template
import atcoder/extra/geometry/tangent

Tangents from a point to a circle

import atcoder/extra/geometry/geometry_template
import atcoder/extra/geometry/tangent

let
  c = initCircle(initPoint[float](0.0, 0.0), 1.0)
  p = initPoint[float](2.0, 0.0)

let (u, v) = tangent(c, p)

doAssert distance(c.p, u) == c.r
doAssert distance(c.p, v) == c.r

tangent(c, p) returns the two tangent points from point p to circle c.

Common tangents of two circles

let
  c1 = initCircle(initPoint[float](0.0, 0.0), 1.0)
  c2 = initCircle(initPoint[float](4.0, 0.0), 1.0)

let lines = tangent(c1, c2)

doAssert lines.len == 4

tangent(c1, c2) returns common tangent lines as seq[Line[Real]].

Notes