VisiLibity 1 
for Planar Visibility Computations 
About Download Using 

Math Acknowledgements License, Links 
About  
VisiLibity Release 1 is a free open source C++ library for 2D floatingpoint
visibility algorithms, path planning, and supporting data types. It is
intended for use in robot and sensor network design software. Other possible
applications include, e.g., manufacturing, facility location,
architectural/urban planning, games, and education. The entire library
consists only of a single compilation unit (one .hpp + one .cpp file) with no
dependence on third party libraries. It is therefore suitable for
applications where simple visibility and path planning computations are needed
but the power of a larger computational geometry library is not necessary.


Download  
The following set of files includes the VisiLibity source code as well as some
other files, one of which is a README with more detailed instructions:


Using  
To use VisiLibity in your C++ program, you simply need to
1. Extract and unzip, e.g., with the terminal command line Here is the source code documentation.
When possible, please cite VisiLibity. For your convenience,
here is a BibTeX item
@Misc{VisiLibity:08, author = {K. J. Obermeyer and Contributors}, title = {The {VisiLibity} Library}, howpublished = {\texttt{http://www.VisiLibity.org}}, year = 2008, note = {Release 1}, abstract = {A C++ library for planar visibility computations}, }Also, I would be very interested to learn what projects VisiLibity has been used for, so if you like, send me an email. Help and Contributions: To report a bug/bugfix or ask a question, send me an email, but please be sure to check Frequently Asked Questions first. Any other comments you may have are also very welcome, e.g., on overall organization/style of the library, possible future functionality, etc..


Math  
VisiLibity uses the C++ double type. In this floatingpoint system, a discrete string of bits represents a number from the continuum of real numbers. One indicator of how precisely a floating point system can represent a real number is the machine epsilon (aka machine precision or unit roundoff) defined as the difference between 1 and the smallest exactly representable number greater than one. In the IEEE 754 Standard for Binary FloatingPoint Arithmetic, machine epsilon for double precision on a 32bit machine is 2^52 (roughly 2.22x10^16). Despite this small value, it is well known that the inexact nature of floatingpoint representation can lead to many problems, e.g.,
So why use floatingpoint arithmetic? As Chee K. Yap wrote in the ``Handbook of Discrete and Computational Geometry" (2nd Edition, p. 930), ``...fast floatingpoint hardware has become a de facto standard in every computer. If we can make our geometric algorithms robust within machine arithmetic, we are assured of the fastest possible implementation..."To achieve robustness using floatingpoint arithmetic, VisiLibity operates using a technique called εgeometry (AKA interval geometry) in which geometric primitives are fattened by very small amount ε. This involves the use of fuzzy comparisons in which equality tests such as x==y are replaced by fabs(xy) ≤ ε. When using VisiLibity, ε should typically be chosen somewhere between machine epsilon and the smallest dimension of any feature in the environment geometry at hand. The aglorithms and methods used in VisiLibity come mostly from these sources: VisiLibity.bib (BibTeX file) 

Acknowledgements  
VisiLibity R1 was developed originally as part of research funded by NSF award 0626457 and ARO award W911NF0510219.  
License  
VisiLibity is licensed under version 3 of the GNU Lesser General Public License. 

Links  
Here are some other software packages you may find useful, though none of
these are officially associated with the VisiLibity project.
CGAL: Computational Geometry Algorithms Library 