15 #include "TApplication.h" 
   32 int main(
int argc, 
char* argv[])
 
   44     JParser<> zap(
"Example program to test convex hull and enclosing circle.");
 
   54   catch(
const exception &error) {
 
   55     FATAL(error.what() << endl);
 
   58   gRandom->SetSeed(seed);
 
   69   if (inputFile != 
"") {
 
   71     ifstream in(inputFile.c_str());
 
   73     for (
double x, 
y; in >> 
x >> 
y; ) {
 
   81     NOTICE(
"Seed: " << gRandom->GetSeed() << endl);
 
   85       buffer.push_back(
JVector2D(gRandom->Uniform(-1.0, +1.0),
 
   86                                  gRandom->Uniform(-1.0, +1.0)));
 
   93       for (const_iterator i = buffer.begin(); i != buffer.end(); ++i)
 
   94         out << 
FIXED(7,3) << i->getX() << 
' '  
   95             << 
FIXED(7,3) << i->getY() << endl;
 
  102     FATAL(
"No points to draw." << endl);
 
  105   for (const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
 
  106     DEBUG(
FIXED(7,3) << i->getX() << 
' ' << 
FIXED(7,3) << i->getY() << endl);
 
  109   const JCircle2D circle(buffer.begin(), buffer.end());
 
  117         << 
distance(buffer.begin(),hull.first)  << endl);
 
  120         << 
distance(buffer.begin(),hull.first)  << 
' ' 
  121         << 
distance(buffer.begin(),hull.second) << endl);
 
  125   double area = 
getArea2D(buffer.begin(), hull.second);
 
  127   NOTICE(
"Area: " << area << endl);
 
  133     for (const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
 
  134       if (!
inside2D(buffer.begin(), hull.second,             *i)) { ++
n[0]; }
 
  135       if (!
inside2D(buffer.begin(), hull.first, hull.second, *i)) { ++
n[1]; }
 
  137       if (!
inside2D(buffer.begin(), hull.first, hull.second, *i)) { 
 
  142     for (
int i = 0; i != 
sizeof(
n)/
sizeof(
n[0]); ++i) {
 
  143       NOTICE(
"Number of points outside [" << i << 
"] " << 
n[i] << endl);
 
  147   TApplication* tp = 
new TApplication(
"user", NULL, NULL);
 
  149   TCanvas cv(
"cv", 
"", 400, 400);
 
  151   cv.SetFillStyle(4000);
 
  161   const Int_t MAX_BUFFER_SIZE = buffer.size() + 1;
 
  163   Double_t  
x[MAX_BUFFER_SIZE];
 
  164   Double_t  
y[MAX_BUFFER_SIZE];
 
  168   for (const_iterator i = buffer.begin(); i != buffer.end(); ++i, ++N) {
 
  174   Double_t 
xmin = -2.0;
 
  175   Double_t 
xmax = +2.0;
 
  176   Double_t ymin = -2.0;
 
  177   Double_t ymax = +2.0;
 
  179   TH2D h2(
"h2", 
"", 1, 
xmin, 
xmax, 1, ymin, ymax);
 
  185   ellipse.SetLineWidth(2);
 
  191   g.SetMarkerStyle(20);
 
  192   g.SetMarkerColor(kBlack);
 
  193   g.SetMarkerSize(0.7);
 
  199   N = 
distance(buffer.begin(), hull.first);
 
  203   g1.SetLineColor(kBlack);
 
  212   N = 
distance(buffer.begin(), hull.second);
 
  219   TGraph g2(N, &
x[i], &
y[i]);
 
  221   g2.SetLineColor(kRed);
 
int main(int argc, char *argv[])
 
General purpose messaging.
 
#define DEBUG(A)
Message macros.
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
I/O formatting auxiliaries.
 
Double_t g1(const Double_t x)
Function.
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
 
Data structure for circle in two dimensions.
 
double getRadius() const
Get radius.
 
Data structure for vector in two dimensions.
 
double getY() const
Get y position.
 
double getX() const
Get x position.
 
Utility class to parse command line options.
 
static const JConvexHull2D getConvexHull2D
Function object for convex hull determination.
 
double getArea2D(T __begin, T __end)
Get area of a convex polygon.
 
bool inside2D(T __begin, T __end, const JVector2D &pos)
Check if given point is inside a convex polygon.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary data structure for floating point format specification.