PRAgMaTIc  master
generate_Steiner_ellipse_3d.cpp
Go to the documentation of this file.
1 
2 /* Start of code generated by generate_Steiner_ellipse_3d.py. Warning - be careful about modifying
3  any of the generated code directly. Any changes/fixes should be done
4  in the code generation script generation.
5  */
6 
7 #include <Eigen/Core>
8 #include <Eigen/Dense>
9 
11 
12 
13 void pragmatic::generate_Steiner_ellipse(const double *x1, const double *x2, const double *x3, const double *x4, double *sm){
14  // # From http://en.wikipedia.org/wiki/Steiner_ellipse
15 
16  Eigen::Matrix<double, 6, 6> M;
17 
18  M <<pow(x1[0] - x2[0], 2), pow(x1[1] - x2[1], 2), pow(x1[2] - x2[2], 2), (x1[1] - x2[1])*(x1[2] - x2[2]), (x1[0] - x2[0])*(x1[2] - x2[2]), (x1[0] - x2[0])*(x1[1] - x2[1]),
19 pow(x2[0] - x3[0], 2), pow(x2[1] - x3[1], 2), pow(x2[2] - x3[2], 2), (x2[1] - x3[1])*(x2[2] - x3[2]), (x2[0] - x3[0])*(x2[2] - x3[2]), (x2[0] - x3[0])*(x2[1] - x3[1]),
20 pow(-x1[0] + x3[0], 2), pow(-x1[1] + x3[1], 2), pow(-x1[2] + x3[2], 2), (-x1[1] + x3[1])*(-x1[2] + x3[2]), (-x1[0] + x3[0])*(-x1[2] + x3[2]), (-x1[0] + x3[0])*(-x1[1] + x3[1]),
21 pow(x1[0] - x4[0], 2), pow(x1[1] - x4[1], 2), pow(x1[2] - x4[2], 2), (x1[1] - x4[1])*(x1[2] - x4[2]), (x1[0] - x4[0])*(x1[2] - x4[2]), (x1[0] - x4[0])*(x1[1] - x4[1]),
22 pow(x2[0] - x4[0], 2), pow(x2[1] - x4[1], 2), pow(x2[2] - x4[2], 2), (x2[1] - x4[1])*(x2[2] - x4[2]), (x2[0] - x4[0])*(x2[2] - x4[2]), (x2[0] - x4[0])*(x2[1] - x4[1]),
23 pow(x3[0] - x4[0], 2), pow(x3[1] - x4[1], 2), pow(x3[2] - x4[2], 2), (x3[1] - x4[1])*(x3[2] - x4[2]), (x3[0] - x4[0])*(x3[2] - x4[2]), (x3[0] - x4[0])*(x3[1] - x4[1]);
24 
25  Eigen::Matrix<double, 6, 1> R;
26  R<<1,1,1,1,1,1;
27  Eigen::Matrix<double, 6, 1> S;
28 
29  M.svd().solve(R, &S);
30 
31  sm[0] = S[0]; sm[1] = S[5]; sm[2] = S[4];
32  sm[3] = S[1]; sm[4] = S[3];
33  sm[5] = S[2];
34  return;
35 }
36 
37 /* End of code generated by generate_Steiner_ellipse_3d.py. Warning - be careful about
38  modifying any of the generated code directly. Any changes/fixes
39  should be done in the code generation script generation.*/
void generate_Steiner_ellipse(const double *x1, const double *x2, const double *x3, const double *x4, double *sm)