tests/geometry/euclidean.cpp
 author Dmitriy Morozov Sun, 07 Feb 2010 21:10:54 -0800 branch dev changeset 201 4759535221ee parent 55 7e71f5984931 permissions -rw-r--r--
Made EventQueue into a binary heap (for efficiency and sanity)
```
#include "geometry/euclidean.h"
#include <vector>
#include <iostream>
#include <cmath>

typedef Kernel<double>				K;
typedef K::Point					Point;
typedef K::Sphere					Sphere;
typedef K::PointContainer			PointContainer;
typedef	K::MatrixType				MatrixType;

int main()
{
K k(3);
std::vector<Point> points(6, k.origin());
points[0][0] = 0; points[0][1] = 0; points[0][2] = 0;
points[1][0] = 0; points[1][1] = 2; points[1][2] = 0;
points[2][0] = 0; points[2][1] = 0; points[2][2] = 5;
points[3][0] = 1; points[3][1] = 1; points[3][2] = 1;
points[4][0] = 0; points[4][1] = 1; points[4][2] = 0;
points[5][0] = 1; points[5][1] = 0; points[5][2] = 0;

// Edges
{
PointContainer vertices(2);
vertices[0] = &points[0]; vertices[1] = &points[2];
std::cout << "{0, 2}:" << std::endl;
Sphere s = k.circumsphere(vertices);
std::cout << "Circumsphere: " << s.center() << " " << s.squared_radius() << std::endl;
std::cout << "Side of: " << k.side_of_circumsphere(vertices, *vertices[1]) << std::endl;
std::cout << std::endl;

vertices[0] = &points[0]; vertices[1] = &points[3];
std::cout << "{0, 3}:" << std::endl;
s = k.circumsphere(vertices);
std::cout << "Circumsphere: " << s.center() << " " << s.squared_radius() << std::endl;
std::cout << "Side of: " << k.side_of_circumsphere(vertices, *vertices[1]) << std::endl;
std::cout << std::endl;
}

// Triangles
{
PointContainer vertices(3);
vertices[0] = &points[0]; vertices[1] = &points[3]; vertices[2] = &points[1];
std::cout << "{0, 3, 1}:" << std::endl;;
Sphere s = k.circumsphere(vertices);
std::cout << "Circumsphere: " << s.center() << " " << s.squared_radius() << std::endl;
std::cout << "Side of: " << k.side_of_circumsphere(vertices, *vertices[1]) << std::endl;
std::cout << std::endl;

vertices[0] = &points[0]; vertices[1] = &points[4]; vertices[2] = &points[5];
std::cout << "{0, 4, 5}:" << std::endl;
s = k.circumsphere(vertices);
std::cout << "Circumsphere: " << s.center() << " " << s.squared_radius() << std::endl;
std::cout << "Side of: " << k.side_of_circumsphere(vertices, *vertices[1]) << std::endl;
std::cout << std::endl;
}

// Tetrahedron
{
PointContainer vertices(4);
vertices[0] = &points[3]; vertices[1] = &points[1]; vertices[2] = &points[2]; vertices[3] = &points[0];
std::cout << "{3, 1, 2, 0}:" << std::endl;
Sphere s = k.circumsphere(vertices);
std::cout << "Circumsphere: " << s.center() << " " << s.squared_radius() << std::endl;
std::cout << "Side of: " << k.side_of_circumsphere(vertices, *vertices[1]) << std::endl;

std::cout << s.center().squared_distance(points[0]) << std::endl;
std::cout << std::endl;
}

{
PointContainer vertices(3);
vertices[0] = &points[3]; vertices[1] = &points[1]; vertices[2] = &points[2];
std::cout << "{3, 1, 2}:" << std::endl;
Sphere s = k.circumsphere(vertices);
std::cout << "Circumsphere: " << s.center() << " " << s.squared_radius() << std::endl;
std::cout << "Side of: " << k.side_of_circumsphere(vertices, points[0]) << std::endl;

std::cout << "Distance: " << points[0].squared_distance(s.center()) << std::endl;

std::cout << s.center().squared_distance(points[0]) << std::endl;
std::cout << std::endl;
}
}
```