Guarding a Terrain by Two Watchtowers

by Pankaj K. Agarwal, Sergey Bereg, Ovidiu Daescu, Haim Kaplan, Simeon Ntafos, Micha Sharir and Binhai Zhu

Figure 1: The three versions of the problem in R3: discrete, semi-continuous, and continuous.

Abstract: Given a polyhedral terrain T with n vertices, the two-watchtower problem for T asks to find two vertical segments, called watchtowers, of smallest common height, whose bottom endpoints (bases) lie on T, and whose top endpoints guard T, in the sense that each point on T is visible from at least one of them. There are three versions of the problem, discrete, semi-continuous, and continuous, depending on whether two, one, or none of the two bases are restricted to be among the vertices of T, respectively.

In this paper we present the following results for the two-watchtower problem in R2 and R3:
(1) We show that the discrete two-watchtowers problem in R2 can be solved in O(n 2log 4 n) time, significantly improving previous solutions. The algorithm works, without increasing its asymptotic running time, for the semi-continuous version, where one of the towers is allowed to be placed anywhere on T.
(2) We show that the continuous two-watchtower problem in R2 can be solved in O(n 3 α(n)log 3 n) time, again significantly improving previous results.
(3) Still in R2, we show that the continuous version of the problem of guarding a finite set P of m points by two watchtowers of smallest common height can be solved in O(mnlog 4 n) time.
(4) We show that the discrete version of the two-watchtower problem in R3 can be solved in O(n 11/3polylog(n)) time; this is the first nontrivial result for this problem in R3.

Keywords: Computational geometry - Visibility algorithms - Terrain guarding - Parametric search

pdf file

, author = {Pankaj Agarwal and Sergey Bereg and Ovidiu Daescu and Haim Kaplan
and Simeon Ntafos and Micha Sharir and Binhai Zhu}
, title = {Guarding a Terrain by Two Watchtowers}
, journal = {Algorithmica}
, year = {2010}
, volume = {58}
, number = {2}
, pages = {352--390}
, url = {}