| VisiLibity.org |
for Floating-Point Visibility Computations |
|
What is VisiLibity?
Download VisiLibity Using VisiLibity |
|
Math behind VisiLibity Acknowledgements License, Links |
| What is VisiLibity? | ||||||||||
|
VisiLibity is a free open source C++ library for
floating-point 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., architectural/urban planning, computer 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 visibility and path planning computations
are needed but the power of a fully fledged computational
geometry library, e.g., LEDA
or CGAL, is not necessary.
VisiLibity offers
|
||||||||||
|
|
||||||||||
| Download | ||||||||||
|
The following set of files includes the VisiLibity source code
as well some other files, one of which is a README file with
more detailed instructions:
|
||||||||||
|
|
||||||||||
| Using VisiLibity | ||||||||||
|
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 = {Karl J. Obermeyer},
title = {The {VisiLibity} library},
howpublished = {\texttt{http://www.VisiLibity.org}},
year = 2008,
note = {R-1},
abstract = {A C++ library for floating-point 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..
|
||||||||||
|
|
||||||||||
| The Math behind VisiLibity | ||||||||||
|
VisiLibity uses the C++ double type. In this floating-point 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 so-called 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 Floating-Point Arithmetic, machine epsilon for double precision on a 32-bit machine is 2^-52 (roughly 2.22x10^-16). Despite this small value, it is well known that the inexact nature of floating-point representation can lead to many problems, e.g.,
So why use floating-point arithmetic? This question is answered quite well in the ``Handbook of Discrete and Computational Geometry" (2nd Edition, p. 930), where Chee K. Yap wrote ``...fast floating-point 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 floating-point arithmetic, VisiLibity operates using a technique called &epsilon -geometry (AKA interval geometry) in which geometric primitives are fattened by very small amount &epsilon . This involves the use of so-called fuzzy comparisons in which equality tests such as x==y are replaced by fabs(x-y) ≤ &epsilon . When using VisiLibity, &epsilon 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 | ||||||||||
|
||||||||||
| License | ||||||||||
|
VisiLibity is licensed under version 3 of the GNU Lesser General Public License. |
||||||||||
| Links | ||||||||||
|
CGAL: Computational Geometry Algorithms Library |