This example shows the normal use of the SCH library: The simplest proximity queries
#include <iostream>
#include <limits>
#include <math.h>
#include <string>
#include "example.hxx"
#ifdef ENABLE_SIGFPE
# include <fenv.h>
#endif
int main(int , char * [])
{
#ifdef ENABLE_SIGFPE
feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT);
#endif
std::cout.precision(std::numeric_limits<double>::digits10);
std::cerr.precision(std::numeric_limits<double>::digits10);
S_Box box(0.2, 0.1, 0.4);
vrot = vrot / vrot.
norm();
std::cout << "First Query" << std::endl;
std::cout << "Collision: " << (collision ? "True" : "False") << std::endl;
std::cout << "Distance: " << d0 << std::endl;
std::cout << "Witness points: " << std::endl;
std::cout << "P1: " << p1 << std::endl;
std::cout << "P2: " << p2 << std::endl;
std::cout << std::endl;
bool comparison = true;
comparison = compare(d0, 1.75797057738, "First query, d0. ") && comparison;
comparison =
compare(p1, (
Vector3(0.0292236259886, 0.601445137096, 0.705635281289)),
"First query, p1. ") && comparison;
comparison =
compare(p2, (
Vector3(0.0239874216807, -0.336387177086, -0.781275504057)),
"First query, p2. ") && comparison;
std::cout << "Second Query" << std::endl;
std::cout << "Collision: " << (collision ? "True" : "False") << std::endl;
std::cout << "Distance: " << d1 << std::endl;
std::cout << "Depth: " << d2 << std::endl;
std::cout << "Witness points: " << std::endl;
std::cout << "P1: " << p1 << std::endl;
std::cout << "P2: " << p2 << std::endl;
std::cout << std::endl;
comparison = compare(d1, 0., "Second query, d1. ") && comparison;
#ifdef SCH_BUILD_BSD
comparison = compare(d2, 0., "Second query, d2. ") && comparison;
comparison =
compare(p1, (
Vector3(-0.211100297803413, -0.0866553324786505, -0.0206764992279858)),
"Second query, p1. ")
&& comparison;
comparison = compare(p2, (
Vector3(0.201035958824805, -0.171232378087511, 0.066080909954798)),
"Second query, p2. ")
&& comparison;
#else
comparison = compare(d2, 0.293744618861213, "Second query, d2. ") && comparison;
comparison =
compare(p1, (
Vector3(0.0110146674327551, -0.0498945075944604, -0.0551780527427314)),
"Second query, p1. ")
&& comparison;
comparison = compare(p2, (
Vector3(-0.158401731667896, 0.18954845401356, -0.0393334018450828)),
"Second query, p2. ")
&& comparison;
#endif
#ifdef SCH_BUILD_BSD
comparison = compare(d0, 0., "Third Query, d0") && comparison;
comparison = compare(p1, (
Vector3(-0.211100297803413, -0.0866553324786505, -0.0206764992279858)),
"Third Query, p1")
&& comparison;
comparison =
compare(p2, (
Vector3(0.201035958824805, -0.171232378087511, 0.066080909954798)),
"Third Query, p2") && comparison;
#else
comparison = compare(d0, -0.0862859011099191, "Third Query, d0") && comparison;
comparison = compare(p1, (
Vector3(0.0110146674327551, -0.0498945075944604, -0.0551780527427314)),
"Third Query, p1")
&& comparison;
comparison = compare(p2, (
Vector3(-0.158401731667896, 0.18954845401356, -0.0393334018450828)),
"Third Query, p2")
&& comparison;
#endif
comparison = compare(d1, 0.659596933491, "Third Query, d1") && comparison;
comparison =
compare(p3, (
Vector3(0.0707763740114, 0.0985548629043, 0.194364718711)),
"Third Query, p3") && comparison;
comparison = compare(p4, (
Vector3(0.259412979986, 0.301096580075, 0.95790254828)),
"Third Query, p4") && comparison;
comparison = compare(d2, 0.516365498703901, "Third Query, d2") && comparison;
comparison = compare(p5, (
sch::Vector3(0.126586144900461, 0.0390218116062935, 0.297048794226006)),
"Third Query, p5")
&& comparison;
comparison = compare(p6, (
sch::Vector3(0.300323477842992, 0.23919818987692, 0.964963650647371)),
"Third Query, p6")
&& comparison;
std::cout << "Third Query" << std::endl;
std::cout << "Distance1 Squared: " << d0 << std::endl;
std::cout << "Witness points 1: " << std::endl;
std::cout << "P1: " << p1 << std::endl;
std::cout << "P2: " << p2 << std::endl;
std::cout << "Distance2 Squared: " << d1 << std::endl;
std::cout << "Witness points 2: " << std::endl;
std::cout << "P1: " << p3 << std::endl;
std::cout << "P2: " << p4 << std::endl;
std::cout << "Distance3 Squared: " << d2 << std::endl;
std::cout << "Witness points 3: " << std::endl;
std::cout << "P1: " << p5 << std::endl;
std::cout << "P2: " << p6 << std::endl;
std::cout << std::endl;
return (comparison ? 0 : 1);
}