Skip to main content
QUICK REVIEW

[Paper Review] An Optimal Algorithm for the Separating Common Tangents of two Polygons

Mikkel Abrahamsen|arXiv (Cornell University)|Nov 12, 2015
Computational Geometry and Mesh Generation14 references4 citations
TL;DR

This paper presents a linear-time, constant-workspace algorithm for computing separating common tangents of two simple polygons given as read-only arrays of vertices. The algorithm uses a two-pointer traversal to detect disjoint convex hulls and returns a separating tangent if one exists, providing the first optimal solution for this problem under these constraints. It also extends to outer common tangents when convex hulls are disjoint.

ABSTRACT

We describe an algorithm for computing the separating common tangents of two simple polygons using linear time and only constant workspace. A tangent of a polygon is a line touching the polygon such that all of the polygon lies to the same side of the line. A separating common tangent of two polygons is a tangent of both polygons where the polygons are lying on different sides of the tangent. Each polygon is given as a read-only array of its corners. If a separating common tangent does not exist, the algorithm reports that. Otherwise, two corners defining a separating common tangent are returned. The algorithm is simple and implies an optimal algorithm for deciding if the convex hulls of two polygons are disjoint or not. This was not known to be possible in linear time and constant workspace prior to this paper. An outer common tangent is a tangent of both polygons where the polygons are on the same side of the tangent. In the case where the convex hulls of the polygons are disjoint, we give an algorithm for computing the outer common tangents in linear time using constant workspace.

Motivation & Objective

  • To develop an algorithm that computes separating common tangents of two simple polygons in linear time using only constant workspace.
  • To solve the long-open problem of deciding whether the convex hulls of two polygons are disjoint using only O(log n) bits of memory.
  • To extend the approach to compute outer common tangents when the convex hulls are disjoint, maintaining linear time and constant workspace.
  • To provide a correct and simplified proof of correctness for the separating common tangent algorithm, addressing flaws in a prior version.

Proposed method

  • The algorithm uses two parallel two-pointers (s0, s1) and (t0, t1) to traverse the vertices of both polygons in a synchronized manner.
  • At each iteration, it checks the orientation of the next vertex relative to the current temporary line defined by (p0[s0], p1[s1]) using the cross product-based T(a,b,c) function.
  • If a vertex lies on the wrong side of the temporary line, the algorithm updates the tangent candidate by advancing the corresponding s-pointer and resetting the traversal pointer of the other polygon.
  • The algorithm maintains invariants ensuring that the temporary line remains a valid candidate for a separating tangent, and terminates when the correct tangent is found or when disjointness is ruled out.
  • For outer common tangents, a similar two-pointer approach is used, but with different termination and update conditions to ensure both polygons lie on the same side of the tangent.
  • The correctness relies on geometric invariants and convex hull properties, particularly that a separating tangent exists iff the convex hulls are disjoint.

Experimental results

Research questions

  • RQ1Can the problem of computing separating common tangents of two simple polygons be solved in linear time with only O(log n) bits of workspace?
  • RQ2Is it possible to decide whether the convex hulls of two polygons are disjoint using only constant workspace and linear time?
  • RQ3What is the minimal set of geometric invariants that guarantee correctness of a two-pointer algorithm for common tangents?
  • RQ4How can the algorithm be adapted to compute outer common tangents when the convex hulls are disjoint, under the same resource constraints?
  • RQ5Can the algorithm be made robust to overlapping or nested convex hulls without increasing workspace or time complexity?

Key findings

  • The algorithm correctly computes a separating common tangent of two simple polygons in O(n0 + n1) time using only O(log n) bits of workspace.
  • The algorithm provides the first optimal solution for determining whether the convex hulls of two polygons are disjoint, a problem previously unsolved under these constraints.
  • The algorithm correctly identifies when no separating common tangent exists, which corresponds exactly to the case where the convex hulls intersect or are nested.
  • For outer common tangents, the algorithm runs in linear time and constant workspace when the convex hulls are disjoint, extending the applicability of the approach.
  • The algorithm's correctness is proven via geometric invariants and convex hull properties, with a simplified proof compared to the preliminary version.
  • The method is robust and efficient, avoiding the need to explicitly compute convex hulls, thus saving O(n) extra space.

Better researchstarts right now

From reading papers to final review, dramatically reduce your research time.

No credit card · Free plan available

This review was created by AI and reviewed by human editors.