Klamp't  0.8.1
TriangleSampler.h
1 #ifndef TRIANGLE_SAMPLER_H
2 #define TRIANGLE_SAMPLER_H
3 
4 #include <KrisLibrary/math3d/Triangle2D.h>
5 #include <KrisLibrary/math3d/Triangle3D.h>
6 #include <vector>
7 #include <KrisLibrary/math/sample.h>
8 using namespace std;
9 using namespace Math3D;
10 
17 {
18  void InitAreas();
19  void Clear() { tris.clear(); areas.clear(); sumAreas.clear(); }
20  inline Real TotalArea() const { return sumAreas.back(); }
21  inline int SampleTri() const { return CumulativeWeightedSample(sumAreas); }
22  void SamplePointOnTri(int tri,Vector2& pt) const;
23  void SamplePoint(Vector2& pt) const;
24  void SamplePoints(int num,std::vector<Vector2>& pts) const;
25  void SamplePoints(int num,std::vector<int>& tris,std::vector<Vector2>& pts) const;
26 
27  std::vector<Triangle2D> tris;
28  std::vector<Real> areas;
29  std::vector<Real> sumAreas;
30 };
31 
38 {
39  void InitAreas();
40  void Clear() { tris.clear(); areas.clear(); sumAreas.clear(); }
41  inline Real TotalArea() const { return sumAreas.back(); }
42  inline int SampleTri() const { return CumulativeWeightedSample(sumAreas); }
43  void SamplePointOnTri(int tri,Vector3& pt) const;
44  void SamplePoint(Vector3& pt) const;
45  void SamplePoints(int num,std::vector<Vector3>& pts) const;
46  void SamplePoints(int num,std::vector<int>& tris,std::vector<Vector3>& pts) const;
47 
48  std::vector<Triangle3D> tris;
49  std::vector<Real> areas;
50  std::vector<Real> sumAreas;
51 };
52 
53 #endif
54 
Samples points in a list of 3d triangles.
Definition: TriangleSampler.h:37
Samples points in a list of 2d triangles.
Definition: TriangleSampler.h:16