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);
123 DEBUG(
"circle: " << circle.getX() <<
' ' << circle.getY() <<
' ' << circle.getRadius() << 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);
158 TEllipse ellipse(circle.getX(), circle.getY(), circle.getRadius());
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);
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
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.
Data structure for vector in two dimensions.
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.