Wykobi is an efficient, robust and simple to use multi-platform 2D/3D computational geometry library. Wykobi provides a concise, predictable, and deterministic interface for geometric primitives and complex geometric routines using modern C++ idioms.
The design and structure of Wykobi lends itself to easy and seamless integration into projects of any scale that require a robust yet efficient 2D/3D computational geometry back-end.
Wykobi can be used error and warning free with the following C++ compilers:
Wykobi is coded in a very readable and easy to understand form. Furthermore there is an extensive tutorial complete with diagrams and renderings and an associated demonstration application implementing the various routines available within Wykobi.
The Wykobi library is made freely available under the open source MIT license. This means Wykobi can be used freely in open source, academic and commercial environments, without the need for licensing, royalties or the open sourcing of any proprietary works derived from Wykobi.
Wykobi is not as object oriented as some of the other libraries one can find on the net. Wykobi is structured around a composition and layering oriented design, with emphasis on rapid and efficient integration and use within projects without the clutter and overhead that is present in other libraries.
Wykobi is not intended to fully replace other extensive libraries such as CGAL or Boost.Geometry, but rather to compliment their use and to also provide simple and quick solutions for projects that perhaps require only lightweight computational geometry capabilities.
In the development process of software intended on performing computational geometry the following points are of great concern and must be dealt with at the earlist possible instances during both the design and development stages:
An excerpt from the abstract of "Robustness In Geometric Computations"
Christoph M. Hoffman (2001):
Geometric computation software tends to be fragile and fails occasionally. This robustness problem is rooted in the difficulty of making unambiguous decisions about incidence and nonincidence, fundamentally impairing layering the geometry software reliably. Additionally, geometric operations tend to have a large number of special and singular cases, further adding to the difficulty of creating dependable geometric software.
The following simple example will instantiate a circle and a 2D segment, then attempt ascertain if they intersect each other, and if they do it will proceed to print out the intersection points to stdout.
#include <iostream> #include <vector> #include "wykobi.hpp" #include "wykobi_utilities.hpp" int main() { typedef double T; wykobi::segment<T,2> segment = wykobi::make_segment(110.0,120.0,230.0,340.0); wykobi::circle <T> circle = wykobi::make_circle (150.0,200.0,123.456); std::vector<wykobi::point2d<T>> intersection_points; wykobi::intersection_point (segment, circle, std::back_inserter(intersection_points)); if (!intersection_points.empty()) { std::cout << "Segment intersects Circle at: "; for (auto p : intersection_points) { std::cout << p << "\n"; } } return 0; }
For a more exstenive set of examples please review the Tutorial page.
Wykobi began its life in 1997 as a simple open source library written in the pascal language known as FastGEO. As FastGEO was developed the base language changed to make use of the new extensions available in the Object Pascal language. As interest grew in FastGEO requests were made to port the library to other languages which had compilers that could take advantage of the capabilities of modern processors and the likes better than the current state of the art object pascal compilers ever could.
As a result of careful consideration and assessment of the direction of FastGEO it was decided that its future would be best served with a port to the C++ language.