Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
Line.cpp
Go to the documentation of this file.
1/* This file is part of MoDELib, the Mechanics Of Defects Evolution Library.
2 *
3 *
4 * MoDELib is distributed without any warranty under the
5 * GNU General Public License (GPL) v2 <http://www.gnu.org/licenses/>.
6 */
7
8#ifndef model_Line_cpp_
9#define model_Line_cpp_
10
11#include <cfloat>
12#include <tuple>
13#include <limits>
14//#include <map>
15#include <Eigen/Dense>
16#include <iostream>
17
18#include <Line.h>
19
20namespace model
21{
22
23 template <int dim>
24 Line<dim>::Line(const VectorDim& P_in,const VectorDim& d_in):
25 /* init */ P(P_in)
26 /* init */,d(d_in.normalized())
27 {
28 const double dNorm(d.norm());
29 if((dNorm-1.0)>std::numeric_limits<double>::epsilon())
30 {
31 std::cout<<"dNorm="<<dNorm<<std::endl;
32 throw std::runtime_error("Line has non-unit direction");
33 }
34 }
35
36 template <int dim>
38 {
39 return P+(P0-P).dot(d)*d;
40 }
41
42
43 template <int dim>
44 bool Line<dim>::contains(const VectorDim& P0,const double& tol) const
45 {
46 return distanceToPoint(P0)<tol;
47 }
48
49
50 template <int dim>
51 double Line<dim>::distanceToPoint(const VectorDim& P0) const
52 {
53 return (P0-snap(P0)).norm();
54 }
55
56 template struct Line<1>;
57 template struct Line<2>;
58 template struct Line<3>;
59
60}
61#endif
const VectorDim d
Definition Line.h:28
const VectorDim P
Definition Line.h:27
double distanceToPoint(const VectorDim &P0) const
Definition Line.cpp:51
VectorDim snap(const VectorDim &P0) const
Definition Line.cpp:37
Line(const VectorDim &P_in, const VectorDim &d_in)
Definition Line.cpp:24
Eigen::Matrix< double, dim, 1 > VectorDim
Definition Line.h:25
bool contains(const VectorDim &P0, const double &tol=std::numeric_limits< float >::epsilon()) const
Definition Line.cpp:44