-
Notifications
You must be signed in to change notification settings - Fork 2
/
Surface.h
67 lines (50 loc) · 1.69 KB
/
Surface.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#ifndef _SURFACE_HEADER_
#define _SURFACE_HEADER_
#include <string>
#include "Point.h"
#include "Utility.h"
#include "EstimatorCollection.h"
typedef std::shared_ptr<EstimatorCollection> EstCol_ptr;
class surface {
private:
std::string surface_name;
// EstimatorCollections
vector< EstCol_ptr > estimators;
public:
surface( std::string label ) : surface_name(label) {};
~surface() {};
// Estimator sets/gets
void addEstimator( EstCol_ptr newEstimator) { estimators.push_back( newEstimator ); };
std::vector< EstCol_ptr > getEstimators() { return estimators; };
virtual std::string name() { return surface_name; };
// returns a normal vector given a point on the surface
// and a crossing direction
virtual point getNormal(point p) = 0;
virtual double eval( point p ) = 0;
virtual double distance( point p, point u ) = 0;
// Estimator interface
void scoreTally(Part_ptr p , double xs);
void endTallyHist();
// TODO get Tally output
};
class plane : public surface {
private:
double a, b, c, d;
public:
plane( std::string label, double p1, double p2, double p3, double p4 ) : surface(label), a(p1), b(p2), c(p3), d(p4) {};
~plane() {};
point getNormal(point p);
double eval( point p );
double distance( point p, point u );
};
class sphere : public surface {
private:
double x0, y0, z0, rad;
public:
sphere( std::string label, double p1, double p2, double p3, double p4 ) : surface(label), x0(p1), y0(p2), z0(p3), rad(p4) {};
~sphere() {};
point getNormal(point p);
double eval( point p );
double distance( point p, point u );
};
#endif