TriangleWall.h
Go to the documentation of this file.
1 // This file is part of the MercuryDPM project (https://www.mercurydpm.org).
2 // Copyright (c), The MercuryDPM Developers Team. All rights reserved.
3 // License: BSD 3-Clause License; see the LICENSE file in the root directory.
4 
5 #ifndef TriangleWall_H
6 #define TriangleWall_H
7 
8 #include <vector>
9 #include "BaseWall.h"
10 #include "InfiniteWall.h"
11 #include "Math/Vector.h"
12 
35 class TriangleWall : public BaseWall
36 {
37 public:
38 
42  TriangleWall() = default;
43 
47  TriangleWall(const TriangleWall& other) = default;
48 
52  ~TriangleWall() override = default;
53 
57  TriangleWall* copy() const override
58  { return new TriangleWall(*this); }
59 
63  std::string getName() const override
64  { return "TriangleWall"; }
65 
69  void read(std::istream& is) override;
70 
74  void write(std::ostream& os) const override;
75 
82  void setVertices(Vec3D A, Vec3D B, Vec3D C);
83 
84  std::array<Vec3D,3> getVertices() const {return vertex_;}
85 
86  void move(const Vec3D& move) override;
87 
88  void setPosition(const Vec3D& position) override;
89 
90  void setOrientation(const Quaternion& orientation) override;
91 
96  void setVertices(Vec3D A, Vec3D B, Vec3D C, Vec3D position);
97 
98  void writeVTK(VTKContainer& vtk) const override;
99 
103  const Vec3D& getVertex(unsigned i) const {return vertex_[i];}
104 
105  const Vec3D& getFaceNormal() const {return faceNormal_;}
106 
111  bool getDistanceAndNormal(const BaseParticle& p, Mdouble& distance, Vec3D& normal_return) const override;
112 
113  void rotate(const Vec3D& angularVelocity) override;
114 
115  bool isLocal(Vec3D& min, Vec3D& max) const override;
116 
117  bool isInsideTriangle(const Vec3D &point) const;
118 
124  void moveVertex(unsigned index, const Vec3D& dP);
125 
130  void moveVertices(const std::array<Vec3D, 3>& dPs);
131 
132  bool isFaceContact(const Vec3D& normal) const override {
133  return (normal==faceNormal_ or normal == -faceNormal_) ? true : false;
134  }
135 
136 private:
137 
138  void updateVertexAndNormal();
139 
143  std::array<Vec3D, 3> vertexInLabFrame_;
148  std::array<Vec3D, 3> vertex_;
149 
155 
159  std::array<Vec3D, 3> edgeNormal_;
160  std::array<Vec3D, 3> edge_;
161  std::array<double, 3> edgeLength_;
162 
167 
168 // /*!
169 // * number of edges that should be treated as edges (instead of ignored)
170 // */
171 // unsigned nEdges = 3;
172 };
173 
174 #endif
int i
Definition: BiCGSTAB_step_by_step.cpp:9
double Mdouble
Definition: GeneralDefine.h:13
float * p
Definition: Tutorial_Map_using.cpp:9
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
Definition: bench_gemm.cpp:47
Definition: BaseParticle.h:33
Basic class for walls.
Definition: BaseWall.h:28
This class contains the 4 components of a quaternion and the standard operators and functions needed ...
Definition: Kernel/Math/Quaternion.h:42
A TriangleWall is convex polygon defined as an intersection of InfiniteWall's.
Definition: TriangleWall.h:36
Vec3D faceNormal_
Definition: TriangleWall.h:166
bool isFaceContact(const Vec3D &normal) const override
Definition: TriangleWall.h:132
Vec3D vertexMax_
Definition: TriangleWall.h:154
std::array< Vec3D, 3 > getVertices() const
Definition: TriangleWall.h:84
void updateVertexAndNormal()
Definition: TriangleWall.cc:197
TriangleWall(const TriangleWall &other)=default
Copy constructor.
void setVertices(Vec3D A, Vec3D B, Vec3D C)
Sets member variables such that the wall represents a triangle with vertices A, B,...
Definition: TriangleWall.cc:144
void writeVTK(VTKContainer &vtk) const override
Definition: TriangleWall.cc:128
void moveVertex(unsigned index, const Vec3D &dP)
Updates the indexed vertex by a given change in position.
Definition: TriangleWall.cc:245
std::array< Vec3D, 3 > vertexInLabFrame_
Definition: TriangleWall.h:143
const Vec3D & getFaceNormal() const
Definition: TriangleWall.h:105
std::array< Vec3D, 3 > edgeNormal_
Definition: TriangleWall.h:159
void write(std::ostream &os) const override
Writes an TriangleWall to an output stream, for example a restart file.
Definition: TriangleWall.cc:118
bool isLocal(Vec3D &min, Vec3D &max) const override
Definition: TriangleWall.cc:223
std::array< Vec3D, 3 > vertex_
Definition: TriangleWall.h:148
const Vec3D & getVertex(unsigned i) const
Returns the position of a vertex.
Definition: TriangleWall.h:103
Vec3D vertexMin_
Definition: TriangleWall.h:153
bool getDistanceAndNormal(const BaseParticle &p, Mdouble &distance, Vec3D &normal_return) const override
Compute the distance from the wall for a given BaseParticle and return if there is a collision....
Definition: TriangleWall.cc:36
void setOrientation(const Quaternion &orientation) override
Sets the orientation of this BaseInteractable.
Definition: TriangleWall.cc:175
TriangleWall()=default
Default constructor.
std::array< double, 3 > edgeLength_
Definition: TriangleWall.h:161
~TriangleWall() override=default
Destructor.
std::string getName() const override
Returns the name of the object, here the string "TriangleWall".
Definition: TriangleWall.h:63
std::array< Vec3D, 3 > edge_
Definition: TriangleWall.h:160
TriangleWall * copy() const override
Wall copy method. It calls the copy constructor of this Wall, useful for polymorphism.
Definition: TriangleWall.h:57
void moveVertices(const std::array< Vec3D, 3 > &dPs)
Updates all vertices by the given changes in position.
Definition: TriangleWall.cc:251
void setPosition(const Vec3D &position) override
Sets the position of this BaseInteractable.
Definition: TriangleWall.cc:169
void read(std::istream &is) override
Reads an TriangleWall from an input stream, for example a restart file.
Definition: TriangleWall.cc:102
bool isInsideTriangle(const Vec3D &point) const
Definition: TriangleWall.cc:230
void rotate(const Vec3D &angularVelocity) override
Rotates this BaseInteractable.
Definition: TriangleWall.cc:90
void move(const Vec3D &move) override
Definition: TriangleWall.cc:163
Definition: Kernel/Math/Vector.h:30
Definition: matrices.h:74
#define min(a, b)
Definition: datatypes.h:22
#define max(a, b)
Definition: datatypes.h:23
void normal(const Vector< double > &x, Vector< double > &normal)
Definition: free_surface_rotation.cc:65
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
Definition: BaseWall.h:17