35 const double Cp1((C-
p1).norm());
36 const double Cp2((C-
p2).norm());
37 const bool Cp1OK((Cp1<tol)?
true : fabs((C-
p1).dot(n1))<tol*Cp1);
38 const bool Cp2OK((Cp2<tol)?
true : fabs((C-
p2).dot(n2))<tol*Cp2);
39 const bool success(Cp1OK && Cp2OK);
42 std::cout<<
"PlanePlaneIntersection FAILED"<<std::endl;
43 std::cout<<std::setprecision(15)<<std::scientific<<
"C="<<C.transpose()<<std::endl;
44 std::cout<<std::setprecision(15)<<std::scientific<<
"p1="<<
p1.transpose()<<std::endl;
45 std::cout<<std::setprecision(15)<<std::scientific<<
"n1="<<n1.transpose()<<std::endl;
46 std::cout<<std::setprecision(15)<<std::scientific<<
"p2="<<
p2.transpose()<<std::endl;
47 std::cout<<std::setprecision(15)<<std::scientific<<
"n2="<<n2.transpose()<<std::endl;
48 std::cout<<std::setprecision(15)<<std::scientific<<
"Cp1="<<Cp1<<std::endl;
49 std::cout<<std::setprecision(15)<<std::scientific<<
"Cp2="<<Cp2<<std::endl;
50 std::cout<<std::setprecision(15)<<std::scientific<<
"tol="<<tol<<std::endl;
65 const double normN1(N1.norm());
66 const double normN2(N2.norm());
73 const double normD(
D.norm());
79 Eigen::Matrix<double,dim+2,dim+2>
M(Eigen::Matrix<double,dim+2,dim+2>::Zero());
80 M.template block<dim,dim>(0,0)=2.0*Eigen::Matrix<double,dim,dim>::Identity();
81 M.template block<dim,1>(0,dim+0)=n1;
82 M.template block<dim,1>(0,dim+1)=n2;
83 M.template block<1,dim>(dim+0,0)=n1.transpose();
84 M.template block<1,dim>(dim+1,0)=n2.transpose();
86 Eigen::Matrix<double,dim+2,1>
b(Eigen::Matrix<double,dim+2,1>::Zero());
87 b.template segment<dim>(0)=
p1+
p2;
91 const VectorDimD C=
M.ldlt().solve(
b).template segment<dim>(0);
94 return std::make_tuple(
INCIDENT,C,
D/normD);
98 if(fabs((
p1-
p2).dot(n1))<tol)
100 return std::make_tuple(
COINCIDENT,0.5*(
p1+
p2),VectorDimD::Zero());
104 return std::make_tuple(
PARALLEL,0.5*(
p1+
p2),VectorDimD::Zero());