-Point MoebiusNewEnfoldment::middlepoint(double t, double u) {
- const double agammas[]= {
- /* angle at rim for surface near edge, for values of t:
- * 0.0 .25 0.5 0.75 1.0, not usu. used */
- PI, 0.75*PI, 0.5*PI, -0.25*PI, -PI, -PI
- };
- const double agammarates[]= {
- /* rates of change of gamma with t */
- -PI, -PI, -PI, -3*PI, -3*PI, -PI
- };
- const double alambdas[]= { 0.0, 0.0, 0.0, 0.0, 0.0 };
- const double alambdarates[]= { 0.0, 0.0, 0.0, 0.0, 0.0 };
- const double bgammas[]= {
- /* angle at middle (u=0.5) in direction of decreasing u, for values of t:
- * 0.0 .25 0.5 0.75 1.0, not usu. used */
- 0, 0.5*PI, 0.5*PI, 0.5*PI, PI, PI
- };
- const double bgammarates[]= {
- /* rates of change of gamma with t */
- 2*PI, 0, 0, 0, 2*PI, 2*PI
- };
- const double blambdas[]= {
- /* shear along middle (u=0.5) for values of t:
- * 0.0 .25 0.5 0.75 1.0, not usu. used */
- 0.0, 0.5, 0.5, 0.5, 0, 0
- };
- const double blambdarates[]= { 0.0, 0.0, 0.0, 0.0, 0.0 };
- if (u > 0.5) {
- Point p= middlepoint(1.0-t,1.0-u);
- return Point(-p[0],p[1],-p[2]);
+ Point p_edge(-sin_pi_t,cos_pi_t,0);
+
+ double alpha_circ= (2.0*M_PI)*(2.0*t)*(2.0*u);
+ Point v_edge1(cos_2pi_t*sin_pi_t,-cos_2pi_t*cos_pi_t,sin_2pi_t);
+ Point v_edge2(sin_2pi_t*cos_pi_t,-sin_2pi_t*sin_pi_t,-cos_2pi_t);
+ Point p_circ_cent= p_edge + v_edge2*(2.0*t);
+ Point p_circ_pt= p_circ_cent + (v_edge1*sin(alpha_circ) + v_edge2*-cos(alpha_circ))*(2.0*t);
+ p_circ_pt[1]= p_edge[1];
+
+ Point v_line(-cos_pi_t,0,sin_pi_t);
+ Point p_line_start(0,1.0-2.0*t,0);
+ Point p_line_pt= p_line_start + v_line*(1.0-2.0*u)*(M_PI*t);
+
+ return p_circ_pt*prop_circ + p_line_pt*(1.0-prop_circ);
+ } else {
+ return middlepoint(0.5,u) + Point(0,0.5-t,0);
+ }
+ } else {
+ Point p_mirror= middlepoint(t,1.0-u);
+ return Point(-p_mirror[0], p_mirror[1], -p_mirror[2]);