Skip to content

Instantly share code, notes, and snippets.

@micahscopes
Last active April 14, 2023 01:59
Show Gist options
  • Save micahscopes/e2cd2f9aa7e2daa9a433a42fffaf8122 to your computer and use it in GitHub Desktop.
Save micahscopes/e2cd2f9aa7e2daa9a433a42fffaf8122 to your computer and use it in GitHub Desktop.
8-dimensional planar rotations with Clifford Algebra and GLSL
// This function rotates the 8-dimensional vector v[8] by angle a in the plane swept through vectors fr[8] and to[8].
// It was generated using Sage's CliffordAlgebra module and Sympy's code printing tools.
// Mathematically, the function makes a rotor from the outer product of normalized 1-vectors fr ^ to, then uses that to do a
// sandwich product with v. You can read about this here: https://en.wikipedia.org/wiki/Rotor_(mathematics)
float[8] rotate(float v[8], float fr[8], float to[8], float angle) {
float sin_th = sin(angle*2*PI);
float cos_th = cos(angle*2*PI);
return float[8]((v[0]*(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(4*fr[0]*fr[1]*to[0]*to[1] + 4*fr[0]*fr[2]*to[0]*to[2] + 4*fr[0]*fr[3]*to[0]*to[3] + 4*fr[0]*fr[4]*to[0]*to[4] + 4*fr[0]*fr[5]*to[0]*to[5] + 4*fr[0]*fr[6]*to[0]*to[6] + 4*fr[0]*fr[7]*to[0]*to[7] + pow(to[0], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0)) - pow(to[1], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0)) - pow(to[2], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0)) - pow(to[3], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0)) - pow(to[4], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0)) - pow(to[5], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0)) - pow(to[6], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0)) - pow(to[7], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0)))) - 2*v[1]*(cos_th*sin_th*(-fr[0]*to[1] + fr[1]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[1]*pow(to[0], 2.0) - fr[0]*fr[1]*pow(to[1], 2.0) + fr[0]*fr[1]*pow(to[2], 2.0) + fr[0]*fr[1]*pow(to[3], 2.0) + fr[0]*fr[1]*pow(to[4], 2.0) + fr[0]*fr[1]*pow(to[5], 2.0) + fr[0]*fr[1]*pow(to[6], 2.0) + fr[0]*fr[1]*pow(to[7], 2.0) - 2*fr[0]*fr[2]*to[1]*to[2] - 2*fr[0]*fr[3]*to[1]*to[3] - 2*fr[0]*fr[4]*to[1]*to[4] - 2*fr[0]*fr[5]*to[1]*to[5] - 2*fr[0]*fr[6]*to[1]*to[6] - 2*fr[0]*fr[7]*to[1]*to[7] - to[0]*to[1]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0)))) - 2*v[2]*(cos_th*sin_th*(-fr[0]*to[2] + fr[2]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[2]*pow(to[0], 2.0) + fr[0]*fr[2]*pow(to[1], 2.0) - fr[0]*fr[2]*pow(to[2], 2.0) + fr[0]*fr[2]*pow(to[3], 2.0) + fr[0]*fr[2]*pow(to[4], 2.0) + fr[0]*fr[2]*pow(to[5], 2.0) + fr[0]*fr[2]*pow(to[6], 2.0) + fr[0]*fr[2]*pow(to[7], 2.0) - 2*fr[0]*fr[3]*to[2]*to[3] - 2*fr[0]*fr[4]*to[2]*to[4] - 2*fr[0]*fr[5]*to[2]*to[5] - 2*fr[0]*fr[6]*to[2]*to[6] - 2*fr[0]*fr[7]*to[2]*to[7] - to[2]*(2*fr[0]*fr[1]*to[1] + to[0]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0))))) - 2*v[3]*(cos_th*sin_th*(-fr[0]*to[3] + fr[3]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[3]*pow(to[0], 2.0) + fr[0]*fr[3]*pow(to[1], 2.0) + fr[0]*fr[3]*pow(to[2], 2.0) - fr[0]*fr[3]*pow(to[3], 2.0) + fr[0]*fr[3]*pow(to[4], 2.0) + fr[0]*fr[3]*pow(to[5], 2.0) + fr[0]*fr[3]*pow(to[6], 2.0) + fr[0]*fr[3]*pow(to[7], 2.0) - 2*fr[0]*fr[4]*to[3]*to[4] - 2*fr[0]*fr[5]*to[3]*to[5] - 2*fr[0]*fr[6]*to[3]*to[6] - 2*fr[0]*fr[7]*to[3]*to[7] - to[3]*(2*fr[0]*fr[1]*to[1] + 2*fr[0]*fr[2]*to[2] + to[0]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0))))) - 2*v[4]*(cos_th*sin_th*(-fr[0]*to[4] + fr[4]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[4]*pow(to[0], 2.0) + fr[0]*fr[4]*pow(to[1], 2.0) + fr[0]*fr[4]*pow(to[2], 2.0) + fr[0]*fr[4]*pow(to[3], 2.0) - fr[0]*fr[4]*pow(to[4], 2.0) + fr[0]*fr[4]*pow(to[5], 2.0) + fr[0]*fr[4]*pow(to[6], 2.0) + fr[0]*fr[4]*pow(to[7], 2.0) - 2*fr[0]*fr[5]*to[4]*to[5] - 2*fr[0]*fr[6]*to[4]*to[6] - 2*fr[0]*fr[7]*to[4]*to[7] - to[4]*(2*fr[0]*fr[1]*to[1] + 2*fr[0]*fr[2]*to[2] + 2*fr[0]*fr[3]*to[3] + to[0]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0))))) - 2*v[5]*(cos_th*sin_th*(-fr[0]*to[5] + fr[5]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[5]*pow(to[0], 2.0) + fr[0]*fr[5]*pow(to[1], 2.0) + fr[0]*fr[5]*pow(to[2], 2.0) + fr[0]*fr[5]*pow(to[3], 2.0) + fr[0]*fr[5]*pow(to[4], 2.0) - fr[0]*fr[5]*pow(to[5], 2.0) + fr[0]*fr[5]*pow(to[6], 2.0) + fr[0]*fr[5]*pow(to[7], 2.0) - 2*fr[0]*fr[6]*to[5]*to[6] - 2*fr[0]*fr[7]*to[5]*to[7] - to[5]*(2*fr[0]*fr[1]*to[1] + 2*fr[0]*fr[2]*to[2] + 2*fr[0]*fr[3]*to[3] + 2*fr[0]*fr[4]*to[4] + to[0]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0))))) - 2*v[6]*(cos_th*sin_th*(-fr[0]*to[6] + fr[6]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[6]*pow(to[0], 2.0) + fr[0]*fr[6]*pow(to[1], 2.0) + fr[0]*fr[6]*pow(to[2], 2.0) + fr[0]*fr[6]*pow(to[3], 2.0) + fr[0]*fr[6]*pow(to[4], 2.0) + fr[0]*fr[6]*pow(to[5], 2.0) - fr[0]*fr[6]*pow(to[6], 2.0) + fr[0]*fr[6]*pow(to[7], 2.0) - 2*fr[0]*fr[7]*to[6]*to[7] - to[6]*(2*fr[0]*fr[1]*to[1] + 2*fr[0]*fr[2]*to[2] + 2*fr[0]*fr[3]*to[3] + 2*fr[0]*fr[4]*to[4] + 2*fr[0]*fr[5]*to[5] + to[0]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0))))) - 2*v[7]*(cos_th*sin_th*(-fr[0]*to[7] + fr[7]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[7]*pow(to[0], 2.0) + fr[0]*fr[7]*pow(to[1], 2.0) + fr[0]*fr[7]*pow(to[2], 2.0) + fr[0]*fr[7]*pow(to[3], 2.0) + fr[0]*fr[7]*pow(to[4], 2.0) + fr[0]*fr[7]*pow(to[5], 2.0) + fr[0]*fr[7]*pow(to[6], 2.0) - fr[0]*fr[7]*pow(to[7], 2.0) - to[7]*(2*fr[0]*fr[1]*to[1] + 2*fr[0]*fr[2]*to[2] + 2*fr[0]*fr[3]*to[3] + 2*fr[0]*fr[4]*to[4] + 2*fr[0]*fr[5]*to[5] + 2*fr[0]*fr[6]*to[6] + to[0]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) - pow(fr[2], 2.0) - pow(fr[3], 2.0) - pow(fr[4], 2.0) - pow(fr[5], 2.0) - pow(fr[6], 2.0) - pow(fr[7], 2.0))))))/(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))), (2*v[0]*(cos_th*sin_th*(-fr[0]*to[1] + fr[1]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[1]*pow(to[0], 2.0) - fr[0]*fr[1]*pow(to[1], 2.0) - fr[0]*fr[1]*pow(to[2], 2.0) - fr[0]*fr[1]*pow(to[3], 2.0) - fr[0]*fr[1]*pow(to[4], 2.0) - fr[0]*fr[1]*pow(to[5], 2.0) - fr[0]*fr[1]*pow(to[6], 2.0) - fr[0]*fr[1]*pow(to[7], 2.0) + 2*fr[1]*fr[2]*to[0]*to[2] + 2*fr[1]*fr[3]*to[0]*to[3] + 2*fr[1]*fr[4]*to[0]*to[4] + 2*fr[1]*fr[5]*to[0]*to[5] + 2*fr[1]*fr[6]*to[0]*to[6] + 2*fr[1]*fr[7]*to[0]*to[7] - to[0]*to[1]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) + v[1]*(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(4*fr[0]*fr[1]*to[0]*to[1] + 4*fr[1]*fr[2]*to[1]*to[2] + 4*fr[1]*fr[3]*to[1]*to[3] + 4*fr[1]*fr[4]*to[1]*to[4] + 4*fr[1]*fr[5]*to[1]*to[5] + 4*fr[1]*fr[6]*to[1]*to[6] + 4*fr[1]*fr[7]*to[1]*to[7] + pow(to[0], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) - pow(to[1], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) - 2*v[2]*(cos_th*sin_th*(-fr[1]*to[2] + fr[2]*to[1]) + pow(sin_th, 2.0)*(fr[1]*fr[2]*pow(to[0], 2.0) + fr[1]*fr[2]*pow(to[1], 2.0) - fr[1]*fr[2]*pow(to[2], 2.0) + fr[1]*fr[2]*pow(to[3], 2.0) + fr[1]*fr[2]*pow(to[4], 2.0) + fr[1]*fr[2]*pow(to[5], 2.0) + fr[1]*fr[2]*pow(to[6], 2.0) + fr[1]*fr[2]*pow(to[7], 2.0) - 2*fr[1]*fr[3]*to[2]*to[3] - 2*fr[1]*fr[4]*to[2]*to[4] - 2*fr[1]*fr[5]*to[2]*to[5] - 2*fr[1]*fr[6]*to[2]*to[6] - 2*fr[1]*fr[7]*to[2]*to[7] - to[2]*(2*fr[0]*fr[1]*to[0] - to[1]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[3]*(cos_th*sin_th*(-fr[1]*to[3] + fr[3]*to[1]) + pow(sin_th, 2.0)*(fr[1]*fr[3]*pow(to[0], 2.0) + fr[1]*fr[3]*pow(to[1], 2.0) + fr[1]*fr[3]*pow(to[2], 2.0) - fr[1]*fr[3]*pow(to[3], 2.0) + fr[1]*fr[3]*pow(to[4], 2.0) + fr[1]*fr[3]*pow(to[5], 2.0) + fr[1]*fr[3]*pow(to[6], 2.0) + fr[1]*fr[3]*pow(to[7], 2.0) - 2*fr[1]*fr[4]*to[3]*to[4] - 2*fr[1]*fr[5]*to[3]*to[5] - 2*fr[1]*fr[6]*to[3]*to[6] - 2*fr[1]*fr[7]*to[3]*to[7] - to[3]*(2*fr[0]*fr[1]*to[0] + 2*fr[1]*fr[2]*to[2] - to[1]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[4]*(cos_th*sin_th*(-fr[1]*to[4] + fr[4]*to[1]) + pow(sin_th, 2.0)*(fr[1]*fr[4]*pow(to[0], 2.0) + fr[1]*fr[4]*pow(to[1], 2.0) + fr[1]*fr[4]*pow(to[2], 2.0) + fr[1]*fr[4]*pow(to[3], 2.0) - fr[1]*fr[4]*pow(to[4], 2.0) + fr[1]*fr[4]*pow(to[5], 2.0) + fr[1]*fr[4]*pow(to[6], 2.0) + fr[1]*fr[4]*pow(to[7], 2.0) - 2*fr[1]*fr[5]*to[4]*to[5] - 2*fr[1]*fr[6]*to[4]*to[6] - 2*fr[1]*fr[7]*to[4]*to[7] - to[4]*(2*fr[0]*fr[1]*to[0] + 2*fr[1]*fr[2]*to[2] + 2*fr[1]*fr[3]*to[3] - to[1]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[5]*(cos_th*sin_th*(-fr[1]*to[5] + fr[5]*to[1]) + pow(sin_th, 2.0)*(fr[1]*fr[5]*pow(to[0], 2.0) + fr[1]*fr[5]*pow(to[1], 2.0) + fr[1]*fr[5]*pow(to[2], 2.0) + fr[1]*fr[5]*pow(to[3], 2.0) + fr[1]*fr[5]*pow(to[4], 2.0) - fr[1]*fr[5]*pow(to[5], 2.0) + fr[1]*fr[5]*pow(to[6], 2.0) + fr[1]*fr[5]*pow(to[7], 2.0) - 2*fr[1]*fr[6]*to[5]*to[6] - 2*fr[1]*fr[7]*to[5]*to[7] - to[5]*(2*fr[0]*fr[1]*to[0] + 2*fr[1]*fr[2]*to[2] + 2*fr[1]*fr[3]*to[3] + 2*fr[1]*fr[4]*to[4] - to[1]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[6]*(cos_th*sin_th*(-fr[1]*to[6] + fr[6]*to[1]) + pow(sin_th, 2.0)*(fr[1]*fr[6]*pow(to[0], 2.0) + fr[1]*fr[6]*pow(to[1], 2.0) + fr[1]*fr[6]*pow(to[2], 2.0) + fr[1]*fr[6]*pow(to[3], 2.0) + fr[1]*fr[6]*pow(to[4], 2.0) + fr[1]*fr[6]*pow(to[5], 2.0) - fr[1]*fr[6]*pow(to[6], 2.0) + fr[1]*fr[6]*pow(to[7], 2.0) - 2*fr[1]*fr[7]*to[6]*to[7] - to[6]*(2*fr[0]*fr[1]*to[0] + 2*fr[1]*fr[2]*to[2] + 2*fr[1]*fr[3]*to[3] + 2*fr[1]*fr[4]*to[4] + 2*fr[1]*fr[5]*to[5] - to[1]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[7]*(cos_th*sin_th*(-fr[1]*to[7] + fr[7]*to[1]) + pow(sin_th, 2.0)*(fr[1]*fr[7]*pow(to[0], 2.0) + fr[1]*fr[7]*pow(to[1], 2.0) + fr[1]*fr[7]*pow(to[2], 2.0) + fr[1]*fr[7]*pow(to[3], 2.0) + fr[1]*fr[7]*pow(to[4], 2.0) + fr[1]*fr[7]*pow(to[5], 2.0) + fr[1]*fr[7]*pow(to[6], 2.0) - fr[1]*fr[7]*pow(to[7], 2.0) - to[7]*(2*fr[0]*fr[1]*to[0] + 2*fr[1]*fr[2]*to[2] + 2*fr[1]*fr[3]*to[3] + 2*fr[1]*fr[4]*to[4] + 2*fr[1]*fr[5]*to[5] + 2*fr[1]*fr[6]*to[6] - to[1]*(pow(fr[0], 2.0) - pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))))/(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))), (2*v[0]*(cos_th*sin_th*(-fr[0]*to[2] + fr[2]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[2]*pow(to[0], 2.0) - fr[0]*fr[2]*pow(to[1], 2.0) - fr[0]*fr[2]*pow(to[2], 2.0) - fr[0]*fr[2]*pow(to[3], 2.0) - fr[0]*fr[2]*pow(to[4], 2.0) - fr[0]*fr[2]*pow(to[5], 2.0) - fr[0]*fr[2]*pow(to[6], 2.0) - fr[0]*fr[2]*pow(to[7], 2.0) + 2*fr[1]*fr[2]*to[0]*to[1] + 2*fr[2]*fr[3]*to[0]*to[3] + 2*fr[2]*fr[4]*to[0]*to[4] + 2*fr[2]*fr[5]*to[0]*to[5] + 2*fr[2]*fr[6]*to[0]*to[6] + 2*fr[2]*fr[7]*to[0]*to[7] - to[0]*to[2]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) + 2*v[1]*(cos_th*sin_th*(-fr[1]*to[2] + fr[2]*to[1]) - pow(sin_th, 2.0)*(-2*fr[0]*fr[2]*to[0]*to[1] + fr[1]*fr[2]*pow(to[0], 2.0) - fr[1]*fr[2]*pow(to[1], 2.0) + fr[1]*fr[2]*pow(to[2], 2.0) + fr[1]*fr[2]*pow(to[3], 2.0) + fr[1]*fr[2]*pow(to[4], 2.0) + fr[1]*fr[2]*pow(to[5], 2.0) + fr[1]*fr[2]*pow(to[6], 2.0) + fr[1]*fr[2]*pow(to[7], 2.0) - 2*fr[2]*fr[3]*to[1]*to[3] - 2*fr[2]*fr[4]*to[1]*to[4] - 2*fr[2]*fr[5]*to[1]*to[5] - 2*fr[2]*fr[6]*to[1]*to[6] - 2*fr[2]*fr[7]*to[1]*to[7] + to[1]*to[2]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) + v[2]*(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(4*fr[2]*fr[3]*to[2]*to[3] + 4*fr[2]*fr[4]*to[2]*to[4] + 4*fr[2]*fr[5]*to[2]*to[5] + 4*fr[2]*fr[6]*to[2]*to[6] + 4*fr[2]*fr[7]*to[2]*to[7] + pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) - pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + 4*to[2]*(fr[0]*fr[2]*to[0] + fr[1]*fr[2]*to[1]) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) - 2*v[3]*(cos_th*sin_th*(-fr[2]*to[3] + fr[3]*to[2]) + pow(sin_th, 2.0)*(fr[2]*fr[3]*pow(to[0], 2.0) + fr[2]*fr[3]*pow(to[1], 2.0) + fr[2]*fr[3]*pow(to[2], 2.0) - fr[2]*fr[3]*pow(to[3], 2.0) + fr[2]*fr[3]*pow(to[4], 2.0) + fr[2]*fr[3]*pow(to[5], 2.0) + fr[2]*fr[3]*pow(to[6], 2.0) + fr[2]*fr[3]*pow(to[7], 2.0) - 2*fr[2]*fr[4]*to[3]*to[4] - 2*fr[2]*fr[5]*to[3]*to[5] - 2*fr[2]*fr[6]*to[3]*to[6] - 2*fr[2]*fr[7]*to[3]*to[7] - to[3]*(2*fr[0]*fr[2]*to[0] + 2*fr[1]*fr[2]*to[1] - to[2]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[4]*(cos_th*sin_th*(-fr[2]*to[4] + fr[4]*to[2]) + pow(sin_th, 2.0)*(fr[2]*fr[4]*pow(to[0], 2.0) + fr[2]*fr[4]*pow(to[1], 2.0) + fr[2]*fr[4]*pow(to[2], 2.0) + fr[2]*fr[4]*pow(to[3], 2.0) - fr[2]*fr[4]*pow(to[4], 2.0) + fr[2]*fr[4]*pow(to[5], 2.0) + fr[2]*fr[4]*pow(to[6], 2.0) + fr[2]*fr[4]*pow(to[7], 2.0) - 2*fr[2]*fr[5]*to[4]*to[5] - 2*fr[2]*fr[6]*to[4]*to[6] - 2*fr[2]*fr[7]*to[4]*to[7] - to[4]*(2*fr[0]*fr[2]*to[0] + 2*fr[1]*fr[2]*to[1] + 2*fr[2]*fr[3]*to[3] - to[2]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[5]*(cos_th*sin_th*(-fr[2]*to[5] + fr[5]*to[2]) + pow(sin_th, 2.0)*(fr[2]*fr[5]*pow(to[0], 2.0) + fr[2]*fr[5]*pow(to[1], 2.0) + fr[2]*fr[5]*pow(to[2], 2.0) + fr[2]*fr[5]*pow(to[3], 2.0) + fr[2]*fr[5]*pow(to[4], 2.0) - fr[2]*fr[5]*pow(to[5], 2.0) + fr[2]*fr[5]*pow(to[6], 2.0) + fr[2]*fr[5]*pow(to[7], 2.0) - 2*fr[2]*fr[6]*to[5]*to[6] - 2*fr[2]*fr[7]*to[5]*to[7] - to[5]*(2*fr[0]*fr[2]*to[0] + 2*fr[1]*fr[2]*to[1] + 2*fr[2]*fr[3]*to[3] + 2*fr[2]*fr[4]*to[4] - to[2]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[6]*(cos_th*sin_th*(-fr[2]*to[6] + fr[6]*to[2]) + pow(sin_th, 2.0)*(fr[2]*fr[6]*pow(to[0], 2.0) + fr[2]*fr[6]*pow(to[1], 2.0) + fr[2]*fr[6]*pow(to[2], 2.0) + fr[2]*fr[6]*pow(to[3], 2.0) + fr[2]*fr[6]*pow(to[4], 2.0) + fr[2]*fr[6]*pow(to[5], 2.0) - fr[2]*fr[6]*pow(to[6], 2.0) + fr[2]*fr[6]*pow(to[7], 2.0) - 2*fr[2]*fr[7]*to[6]*to[7] - to[6]*(2*fr[0]*fr[2]*to[0] + 2*fr[1]*fr[2]*to[1] + 2*fr[2]*fr[3]*to[3] + 2*fr[2]*fr[4]*to[4] + 2*fr[2]*fr[5]*to[5] - to[2]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[7]*(cos_th*sin_th*(-fr[2]*to[7] + fr[7]*to[2]) + pow(sin_th, 2.0)*(fr[2]*fr[7]*pow(to[0], 2.0) + fr[2]*fr[7]*pow(to[1], 2.0) + fr[2]*fr[7]*pow(to[2], 2.0) + fr[2]*fr[7]*pow(to[3], 2.0) + fr[2]*fr[7]*pow(to[4], 2.0) + fr[2]*fr[7]*pow(to[5], 2.0) + fr[2]*fr[7]*pow(to[6], 2.0) - fr[2]*fr[7]*pow(to[7], 2.0) - to[7]*(2*fr[0]*fr[2]*to[0] + 2*fr[1]*fr[2]*to[1] + 2*fr[2]*fr[3]*to[3] + 2*fr[2]*fr[4]*to[4] + 2*fr[2]*fr[5]*to[5] + 2*fr[2]*fr[6]*to[6] - to[2]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) - pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))))/(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))), (2*v[0]*(cos_th*sin_th*(-fr[0]*to[3] + fr[3]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[3]*pow(to[0], 2.0) - fr[0]*fr[3]*pow(to[1], 2.0) - fr[0]*fr[3]*pow(to[2], 2.0) - fr[0]*fr[3]*pow(to[3], 2.0) - fr[0]*fr[3]*pow(to[4], 2.0) - fr[0]*fr[3]*pow(to[5], 2.0) - fr[0]*fr[3]*pow(to[6], 2.0) - fr[0]*fr[3]*pow(to[7], 2.0) + 2*fr[1]*fr[3]*to[0]*to[1] + 2*fr[2]*fr[3]*to[0]*to[2] + 2*fr[3]*fr[4]*to[0]*to[4] + 2*fr[3]*fr[5]*to[0]*to[5] + 2*fr[3]*fr[6]*to[0]*to[6] + 2*fr[3]*fr[7]*to[0]*to[7] - to[0]*to[3]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) + 2*v[1]*(cos_th*sin_th*(-fr[1]*to[3] + fr[3]*to[1]) - pow(sin_th, 2.0)*(-2*fr[0]*fr[3]*to[0]*to[1] + fr[1]*fr[3]*pow(to[0], 2.0) - fr[1]*fr[3]*pow(to[1], 2.0) + fr[1]*fr[3]*pow(to[2], 2.0) + fr[1]*fr[3]*pow(to[3], 2.0) + fr[1]*fr[3]*pow(to[4], 2.0) + fr[1]*fr[3]*pow(to[5], 2.0) + fr[1]*fr[3]*pow(to[6], 2.0) + fr[1]*fr[3]*pow(to[7], 2.0) - 2*fr[2]*fr[3]*to[1]*to[2] - 2*fr[3]*fr[4]*to[1]*to[4] - 2*fr[3]*fr[5]*to[1]*to[5] - 2*fr[3]*fr[6]*to[1]*to[6] - 2*fr[3]*fr[7]*to[1]*to[7] + to[1]*to[3]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) + 2*v[2]*(cos_th*sin_th*(-fr[2]*to[3] + fr[3]*to[2]) - pow(sin_th, 2.0)*(fr[2]*fr[3]*pow(to[0], 2.0) + fr[2]*fr[3]*pow(to[1], 2.0) - fr[2]*fr[3]*pow(to[2], 2.0) + fr[2]*fr[3]*pow(to[3], 2.0) + fr[2]*fr[3]*pow(to[4], 2.0) + fr[2]*fr[3]*pow(to[5], 2.0) + fr[2]*fr[3]*pow(to[6], 2.0) + fr[2]*fr[3]*pow(to[7], 2.0) - 2*fr[3]*fr[4]*to[2]*to[4] - 2*fr[3]*fr[5]*to[2]*to[5] - 2*fr[3]*fr[6]*to[2]*to[6] - 2*fr[3]*fr[7]*to[2]*to[7] + to[2]*to[3]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) - 2*to[2]*(fr[0]*fr[3]*to[0] + fr[1]*fr[3]*to[1]))) + v[3]*(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(4*fr[3]*fr[4]*to[3]*to[4] + 4*fr[3]*fr[5]*to[3]*to[5] + 4*fr[3]*fr[6]*to[3]*to[6] + 4*fr[3]*fr[7]*to[3]*to[7] + pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) - pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + 4*to[3]*(fr[0]*fr[3]*to[0] + fr[1]*fr[3]*to[1] + fr[2]*fr[3]*to[2]) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) - 2*v[4]*(cos_th*sin_th*(-fr[3]*to[4] + fr[4]*to[3]) + pow(sin_th, 2.0)*(fr[3]*fr[4]*pow(to[0], 2.0) + fr[3]*fr[4]*pow(to[1], 2.0) + fr[3]*fr[4]*pow(to[2], 2.0) + fr[3]*fr[4]*pow(to[3], 2.0) - fr[3]*fr[4]*pow(to[4], 2.0) + fr[3]*fr[4]*pow(to[5], 2.0) + fr[3]*fr[4]*pow(to[6], 2.0) + fr[3]*fr[4]*pow(to[7], 2.0) - 2*fr[3]*fr[5]*to[4]*to[5] - 2*fr[3]*fr[6]*to[4]*to[6] - 2*fr[3]*fr[7]*to[4]*to[7] - to[4]*(2*fr[0]*fr[3]*to[0] + 2*fr[1]*fr[3]*to[1] + 2*fr[2]*fr[3]*to[2] - to[3]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[5]*(cos_th*sin_th*(-fr[3]*to[5] + fr[5]*to[3]) + pow(sin_th, 2.0)*(fr[3]*fr[5]*pow(to[0], 2.0) + fr[3]*fr[5]*pow(to[1], 2.0) + fr[3]*fr[5]*pow(to[2], 2.0) + fr[3]*fr[5]*pow(to[3], 2.0) + fr[3]*fr[5]*pow(to[4], 2.0) - fr[3]*fr[5]*pow(to[5], 2.0) + fr[3]*fr[5]*pow(to[6], 2.0) + fr[3]*fr[5]*pow(to[7], 2.0) - 2*fr[3]*fr[6]*to[5]*to[6] - 2*fr[3]*fr[7]*to[5]*to[7] - to[5]*(2*fr[0]*fr[3]*to[0] + 2*fr[1]*fr[3]*to[1] + 2*fr[2]*fr[3]*to[2] + 2*fr[3]*fr[4]*to[4] - to[3]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[6]*(cos_th*sin_th*(-fr[3]*to[6] + fr[6]*to[3]) + pow(sin_th, 2.0)*(fr[3]*fr[6]*pow(to[0], 2.0) + fr[3]*fr[6]*pow(to[1], 2.0) + fr[3]*fr[6]*pow(to[2], 2.0) + fr[3]*fr[6]*pow(to[3], 2.0) + fr[3]*fr[6]*pow(to[4], 2.0) + fr[3]*fr[6]*pow(to[5], 2.0) - fr[3]*fr[6]*pow(to[6], 2.0) + fr[3]*fr[6]*pow(to[7], 2.0) - 2*fr[3]*fr[7]*to[6]*to[7] - to[6]*(2*fr[0]*fr[3]*to[0] + 2*fr[1]*fr[3]*to[1] + 2*fr[2]*fr[3]*to[2] + 2*fr[3]*fr[4]*to[4] + 2*fr[3]*fr[5]*to[5] - to[3]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[7]*(cos_th*sin_th*(-fr[3]*to[7] + fr[7]*to[3]) + pow(sin_th, 2.0)*(fr[3]*fr[7]*pow(to[0], 2.0) + fr[3]*fr[7]*pow(to[1], 2.0) + fr[3]*fr[7]*pow(to[2], 2.0) + fr[3]*fr[7]*pow(to[3], 2.0) + fr[3]*fr[7]*pow(to[4], 2.0) + fr[3]*fr[7]*pow(to[5], 2.0) + fr[3]*fr[7]*pow(to[6], 2.0) - fr[3]*fr[7]*pow(to[7], 2.0) - to[7]*(2*fr[0]*fr[3]*to[0] + 2*fr[1]*fr[3]*to[1] + 2*fr[2]*fr[3]*to[2] + 2*fr[3]*fr[4]*to[4] + 2*fr[3]*fr[5]*to[5] + 2*fr[3]*fr[6]*to[6] - to[3]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) - pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))))/(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))), (2*v[0]*(cos_th*sin_th*(-fr[0]*to[4] + fr[4]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[4]*pow(to[0], 2.0) - fr[0]*fr[4]*pow(to[1], 2.0) - fr[0]*fr[4]*pow(to[2], 2.0) - fr[0]*fr[4]*pow(to[3], 2.0) - fr[0]*fr[4]*pow(to[4], 2.0) - fr[0]*fr[4]*pow(to[5], 2.0) - fr[0]*fr[4]*pow(to[6], 2.0) - fr[0]*fr[4]*pow(to[7], 2.0) + 2*fr[1]*fr[4]*to[0]*to[1] + 2*fr[2]*fr[4]*to[0]*to[2] + 2*fr[3]*fr[4]*to[0]*to[3] + 2*fr[4]*fr[5]*to[0]*to[5] + 2*fr[4]*fr[6]*to[0]*to[6] + 2*fr[4]*fr[7]*to[0]*to[7] - to[0]*to[4]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) + 2*v[1]*(cos_th*sin_th*(-fr[1]*to[4] + fr[4]*to[1]) - pow(sin_th, 2.0)*(-2*fr[0]*fr[4]*to[0]*to[1] + fr[1]*fr[4]*pow(to[0], 2.0) - fr[1]*fr[4]*pow(to[1], 2.0) + fr[1]*fr[4]*pow(to[2], 2.0) + fr[1]*fr[4]*pow(to[3], 2.0) + fr[1]*fr[4]*pow(to[4], 2.0) + fr[1]*fr[4]*pow(to[5], 2.0) + fr[1]*fr[4]*pow(to[6], 2.0) + fr[1]*fr[4]*pow(to[7], 2.0) - 2*fr[2]*fr[4]*to[1]*to[2] - 2*fr[3]*fr[4]*to[1]*to[3] - 2*fr[4]*fr[5]*to[1]*to[5] - 2*fr[4]*fr[6]*to[1]*to[6] - 2*fr[4]*fr[7]*to[1]*to[7] + to[1]*to[4]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) + 2*v[2]*(cos_th*sin_th*(-fr[2]*to[4] + fr[4]*to[2]) - pow(sin_th, 2.0)*(fr[2]*fr[4]*pow(to[0], 2.0) + fr[2]*fr[4]*pow(to[1], 2.0) - fr[2]*fr[4]*pow(to[2], 2.0) + fr[2]*fr[4]*pow(to[3], 2.0) + fr[2]*fr[4]*pow(to[4], 2.0) + fr[2]*fr[4]*pow(to[5], 2.0) + fr[2]*fr[4]*pow(to[6], 2.0) + fr[2]*fr[4]*pow(to[7], 2.0) - 2*fr[3]*fr[4]*to[2]*to[3] - 2*fr[4]*fr[5]*to[2]*to[5] - 2*fr[4]*fr[6]*to[2]*to[6] - 2*fr[4]*fr[7]*to[2]*to[7] + to[2]*to[4]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) - 2*to[2]*(fr[0]*fr[4]*to[0] + fr[1]*fr[4]*to[1]))) + 2*v[3]*(cos_th*sin_th*(-fr[3]*to[4] + fr[4]*to[3]) - pow(sin_th, 2.0)*(fr[3]*fr[4]*pow(to[0], 2.0) + fr[3]*fr[4]*pow(to[1], 2.0) + fr[3]*fr[4]*pow(to[2], 2.0) - fr[3]*fr[4]*pow(to[3], 2.0) + fr[3]*fr[4]*pow(to[4], 2.0) + fr[3]*fr[4]*pow(to[5], 2.0) + fr[3]*fr[4]*pow(to[6], 2.0) + fr[3]*fr[4]*pow(to[7], 2.0) - 2*fr[4]*fr[5]*to[3]*to[5] - 2*fr[4]*fr[6]*to[3]*to[6] - 2*fr[4]*fr[7]*to[3]*to[7] + to[3]*to[4]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) - 2*to[3]*(fr[0]*fr[4]*to[0] + fr[1]*fr[4]*to[1] + fr[2]*fr[4]*to[2]))) + v[4]*(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(4*fr[4]*fr[5]*to[4]*to[5] + 4*fr[4]*fr[6]*to[4]*to[6] + 4*fr[4]*fr[7]*to[4]*to[7] + pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) - pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + 4*to[4]*(fr[0]*fr[4]*to[0] + fr[1]*fr[4]*to[1] + fr[2]*fr[4]*to[2] + fr[3]*fr[4]*to[3]) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) - 2*v[5]*(cos_th*sin_th*(-fr[4]*to[5] + fr[5]*to[4]) + pow(sin_th, 2.0)*(fr[4]*fr[5]*pow(to[0], 2.0) + fr[4]*fr[5]*pow(to[1], 2.0) + fr[4]*fr[5]*pow(to[2], 2.0) + fr[4]*fr[5]*pow(to[3], 2.0) + fr[4]*fr[5]*pow(to[4], 2.0) - fr[4]*fr[5]*pow(to[5], 2.0) + fr[4]*fr[5]*pow(to[6], 2.0) + fr[4]*fr[5]*pow(to[7], 2.0) - 2*fr[4]*fr[6]*to[5]*to[6] - 2*fr[4]*fr[7]*to[5]*to[7] - to[5]*(2*fr[0]*fr[4]*to[0] + 2*fr[1]*fr[4]*to[1] + 2*fr[2]*fr[4]*to[2] + 2*fr[3]*fr[4]*to[3] - to[4]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[6]*(cos_th*sin_th*(-fr[4]*to[6] + fr[6]*to[4]) + pow(sin_th, 2.0)*(fr[4]*fr[6]*pow(to[0], 2.0) + fr[4]*fr[6]*pow(to[1], 2.0) + fr[4]*fr[6]*pow(to[2], 2.0) + fr[4]*fr[6]*pow(to[3], 2.0) + fr[4]*fr[6]*pow(to[4], 2.0) + fr[4]*fr[6]*pow(to[5], 2.0) - fr[4]*fr[6]*pow(to[6], 2.0) + fr[4]*fr[6]*pow(to[7], 2.0) - 2*fr[4]*fr[7]*to[6]*to[7] - to[6]*(2*fr[0]*fr[4]*to[0] + 2*fr[1]*fr[4]*to[1] + 2*fr[2]*fr[4]*to[2] + 2*fr[3]*fr[4]*to[3] + 2*fr[4]*fr[5]*to[5] - to[4]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[7]*(cos_th*sin_th*(-fr[4]*to[7] + fr[7]*to[4]) + pow(sin_th, 2.0)*(fr[4]*fr[7]*pow(to[0], 2.0) + fr[4]*fr[7]*pow(to[1], 2.0) + fr[4]*fr[7]*pow(to[2], 2.0) + fr[4]*fr[7]*pow(to[3], 2.0) + fr[4]*fr[7]*pow(to[4], 2.0) + fr[4]*fr[7]*pow(to[5], 2.0) + fr[4]*fr[7]*pow(to[6], 2.0) - fr[4]*fr[7]*pow(to[7], 2.0) - to[7]*(2*fr[0]*fr[4]*to[0] + 2*fr[1]*fr[4]*to[1] + 2*fr[2]*fr[4]*to[2] + 2*fr[3]*fr[4]*to[3] + 2*fr[4]*fr[5]*to[5] + 2*fr[4]*fr[6]*to[6] - to[4]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) - pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))))/(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))), (2*v[0]*(cos_th*sin_th*(-fr[0]*to[5] + fr[5]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[5]*pow(to[0], 2.0) - fr[0]*fr[5]*pow(to[1], 2.0) - fr[0]*fr[5]*pow(to[2], 2.0) - fr[0]*fr[5]*pow(to[3], 2.0) - fr[0]*fr[5]*pow(to[4], 2.0) - fr[0]*fr[5]*pow(to[5], 2.0) - fr[0]*fr[5]*pow(to[6], 2.0) - fr[0]*fr[5]*pow(to[7], 2.0) + 2*fr[1]*fr[5]*to[0]*to[1] + 2*fr[2]*fr[5]*to[0]*to[2] + 2*fr[3]*fr[5]*to[0]*to[3] + 2*fr[4]*fr[5]*to[0]*to[4] + 2*fr[5]*fr[6]*to[0]*to[6] + 2*fr[5]*fr[7]*to[0]*to[7] - to[0]*to[5]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) + 2*v[1]*(cos_th*sin_th*(-fr[1]*to[5] + fr[5]*to[1]) - pow(sin_th, 2.0)*(-2*fr[0]*fr[5]*to[0]*to[1] + fr[1]*fr[5]*pow(to[0], 2.0) - fr[1]*fr[5]*pow(to[1], 2.0) + fr[1]*fr[5]*pow(to[2], 2.0) + fr[1]*fr[5]*pow(to[3], 2.0) + fr[1]*fr[5]*pow(to[4], 2.0) + fr[1]*fr[5]*pow(to[5], 2.0) + fr[1]*fr[5]*pow(to[6], 2.0) + fr[1]*fr[5]*pow(to[7], 2.0) - 2*fr[2]*fr[5]*to[1]*to[2] - 2*fr[3]*fr[5]*to[1]*to[3] - 2*fr[4]*fr[5]*to[1]*to[4] - 2*fr[5]*fr[6]*to[1]*to[6] - 2*fr[5]*fr[7]*to[1]*to[7] + to[1]*to[5]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) + 2*v[2]*(cos_th*sin_th*(-fr[2]*to[5] + fr[5]*to[2]) - pow(sin_th, 2.0)*(fr[2]*fr[5]*pow(to[0], 2.0) + fr[2]*fr[5]*pow(to[1], 2.0) - fr[2]*fr[5]*pow(to[2], 2.0) + fr[2]*fr[5]*pow(to[3], 2.0) + fr[2]*fr[5]*pow(to[4], 2.0) + fr[2]*fr[5]*pow(to[5], 2.0) + fr[2]*fr[5]*pow(to[6], 2.0) + fr[2]*fr[5]*pow(to[7], 2.0) - 2*fr[3]*fr[5]*to[2]*to[3] - 2*fr[4]*fr[5]*to[2]*to[4] - 2*fr[5]*fr[6]*to[2]*to[6] - 2*fr[5]*fr[7]*to[2]*to[7] + to[2]*to[5]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) - 2*to[2]*(fr[0]*fr[5]*to[0] + fr[1]*fr[5]*to[1]))) + 2*v[3]*(cos_th*sin_th*(-fr[3]*to[5] + fr[5]*to[3]) - pow(sin_th, 2.0)*(fr[3]*fr[5]*pow(to[0], 2.0) + fr[3]*fr[5]*pow(to[1], 2.0) + fr[3]*fr[5]*pow(to[2], 2.0) - fr[3]*fr[5]*pow(to[3], 2.0) + fr[3]*fr[5]*pow(to[4], 2.0) + fr[3]*fr[5]*pow(to[5], 2.0) + fr[3]*fr[5]*pow(to[6], 2.0) + fr[3]*fr[5]*pow(to[7], 2.0) - 2*fr[4]*fr[5]*to[3]*to[4] - 2*fr[5]*fr[6]*to[3]*to[6] - 2*fr[5]*fr[7]*to[3]*to[7] + to[3]*to[5]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) - 2*to[3]*(fr[0]*fr[5]*to[0] + fr[1]*fr[5]*to[1] + fr[2]*fr[5]*to[2]))) + 2*v[4]*(cos_th*sin_th*(-fr[4]*to[5] + fr[5]*to[4]) - pow(sin_th, 2.0)*(fr[4]*fr[5]*pow(to[0], 2.0) + fr[4]*fr[5]*pow(to[1], 2.0) + fr[4]*fr[5]*pow(to[2], 2.0) + fr[4]*fr[5]*pow(to[3], 2.0) - fr[4]*fr[5]*pow(to[4], 2.0) + fr[4]*fr[5]*pow(to[5], 2.0) + fr[4]*fr[5]*pow(to[6], 2.0) + fr[4]*fr[5]*pow(to[7], 2.0) - 2*fr[5]*fr[6]*to[4]*to[6] - 2*fr[5]*fr[7]*to[4]*to[7] + to[4]*to[5]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) - 2*to[4]*(fr[0]*fr[5]*to[0] + fr[1]*fr[5]*to[1] + fr[2]*fr[5]*to[2] + fr[3]*fr[5]*to[3]))) + v[5]*(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(4*fr[5]*fr[6]*to[5]*to[6] + 4*fr[5]*fr[7]*to[5]*to[7] + pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) - pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + 4*to[5]*(fr[0]*fr[5]*to[0] + fr[1]*fr[5]*to[1] + fr[2]*fr[5]*to[2] + fr[3]*fr[5]*to[3] + fr[4]*fr[5]*to[4]) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))) - 2*v[6]*(cos_th*sin_th*(-fr[5]*to[6] + fr[6]*to[5]) + pow(sin_th, 2.0)*(fr[5]*fr[6]*pow(to[0], 2.0) + fr[5]*fr[6]*pow(to[1], 2.0) + fr[5]*fr[6]*pow(to[2], 2.0) + fr[5]*fr[6]*pow(to[3], 2.0) + fr[5]*fr[6]*pow(to[4], 2.0) + fr[5]*fr[6]*pow(to[5], 2.0) - fr[5]*fr[6]*pow(to[6], 2.0) + fr[5]*fr[6]*pow(to[7], 2.0) - 2*fr[5]*fr[7]*to[6]*to[7] - to[6]*(2*fr[0]*fr[5]*to[0] + 2*fr[1]*fr[5]*to[1] + 2*fr[2]*fr[5]*to[2] + 2*fr[3]*fr[5]*to[3] + 2*fr[4]*fr[5]*to[4] - to[5]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))) - 2*v[7]*(cos_th*sin_th*(-fr[5]*to[7] + fr[7]*to[5]) + pow(sin_th, 2.0)*(fr[5]*fr[7]*pow(to[0], 2.0) + fr[5]*fr[7]*pow(to[1], 2.0) + fr[5]*fr[7]*pow(to[2], 2.0) + fr[5]*fr[7]*pow(to[3], 2.0) + fr[5]*fr[7]*pow(to[4], 2.0) + fr[5]*fr[7]*pow(to[5], 2.0) + fr[5]*fr[7]*pow(to[6], 2.0) - fr[5]*fr[7]*pow(to[7], 2.0) - to[7]*(2*fr[0]*fr[5]*to[0] + 2*fr[1]*fr[5]*to[1] + 2*fr[2]*fr[5]*to[2] + 2*fr[3]*fr[5]*to[3] + 2*fr[4]*fr[5]*to[4] + 2*fr[5]*fr[6]*to[6] - to[5]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) - pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0))))))/(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))), (2*v[0]*(cos_th*sin_th*(-fr[0]*to[6] + fr[6]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[6]*pow(to[0], 2.0) - fr[0]*fr[6]*pow(to[1], 2.0) - fr[0]*fr[6]*pow(to[2], 2.0) - fr[0]*fr[6]*pow(to[3], 2.0) - fr[0]*fr[6]*pow(to[4], 2.0) - fr[0]*fr[6]*pow(to[5], 2.0) - fr[0]*fr[6]*pow(to[6], 2.0) - fr[0]*fr[6]*pow(to[7], 2.0) + 2*fr[1]*fr[6]*to[0]*to[1] + 2*fr[2]*fr[6]*to[0]*to[2] + 2*fr[3]*fr[6]*to[0]*to[3] + 2*fr[4]*fr[6]*to[0]*to[4] + 2*fr[5]*fr[6]*to[0]*to[5] + 2*fr[6]*fr[7]*to[0]*to[7] - to[0]*to[6]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)))) + 2*v[1]*(cos_th*sin_th*(-fr[1]*to[6] + fr[6]*to[1]) - pow(sin_th, 2.0)*(-2*fr[0]*fr[6]*to[0]*to[1] + fr[1]*fr[6]*pow(to[0], 2.0) - fr[1]*fr[6]*pow(to[1], 2.0) + fr[1]*fr[6]*pow(to[2], 2.0) + fr[1]*fr[6]*pow(to[3], 2.0) + fr[1]*fr[6]*pow(to[4], 2.0) + fr[1]*fr[6]*pow(to[5], 2.0) + fr[1]*fr[6]*pow(to[6], 2.0) + fr[1]*fr[6]*pow(to[7], 2.0) - 2*fr[2]*fr[6]*to[1]*to[2] - 2*fr[3]*fr[6]*to[1]*to[3] - 2*fr[4]*fr[6]*to[1]*to[4] - 2*fr[5]*fr[6]*to[1]*to[5] - 2*fr[6]*fr[7]*to[1]*to[7] + to[1]*to[6]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)))) + 2*v[2]*(cos_th*sin_th*(-fr[2]*to[6] + fr[6]*to[2]) - pow(sin_th, 2.0)*(fr[2]*fr[6]*pow(to[0], 2.0) + fr[2]*fr[6]*pow(to[1], 2.0) - fr[2]*fr[6]*pow(to[2], 2.0) + fr[2]*fr[6]*pow(to[3], 2.0) + fr[2]*fr[6]*pow(to[4], 2.0) + fr[2]*fr[6]*pow(to[5], 2.0) + fr[2]*fr[6]*pow(to[6], 2.0) + fr[2]*fr[6]*pow(to[7], 2.0) - 2*fr[3]*fr[6]*to[2]*to[3] - 2*fr[4]*fr[6]*to[2]*to[4] - 2*fr[5]*fr[6]*to[2]*to[5] - 2*fr[6]*fr[7]*to[2]*to[7] + to[2]*to[6]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)) - 2*to[2]*(fr[0]*fr[6]*to[0] + fr[1]*fr[6]*to[1]))) + 2*v[3]*(cos_th*sin_th*(-fr[3]*to[6] + fr[6]*to[3]) - pow(sin_th, 2.0)*(fr[3]*fr[6]*pow(to[0], 2.0) + fr[3]*fr[6]*pow(to[1], 2.0) + fr[3]*fr[6]*pow(to[2], 2.0) - fr[3]*fr[6]*pow(to[3], 2.0) + fr[3]*fr[6]*pow(to[4], 2.0) + fr[3]*fr[6]*pow(to[5], 2.0) + fr[3]*fr[6]*pow(to[6], 2.0) + fr[3]*fr[6]*pow(to[7], 2.0) - 2*fr[4]*fr[6]*to[3]*to[4] - 2*fr[5]*fr[6]*to[3]*to[5] - 2*fr[6]*fr[7]*to[3]*to[7] + to[3]*to[6]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)) - 2*to[3]*(fr[0]*fr[6]*to[0] + fr[1]*fr[6]*to[1] + fr[2]*fr[6]*to[2]))) + 2*v[4]*(cos_th*sin_th*(-fr[4]*to[6] + fr[6]*to[4]) - pow(sin_th, 2.0)*(fr[4]*fr[6]*pow(to[0], 2.0) + fr[4]*fr[6]*pow(to[1], 2.0) + fr[4]*fr[6]*pow(to[2], 2.0) + fr[4]*fr[6]*pow(to[3], 2.0) - fr[4]*fr[6]*pow(to[4], 2.0) + fr[4]*fr[6]*pow(to[5], 2.0) + fr[4]*fr[6]*pow(to[6], 2.0) + fr[4]*fr[6]*pow(to[7], 2.0) - 2*fr[5]*fr[6]*to[4]*to[5] - 2*fr[6]*fr[7]*to[4]*to[7] + to[4]*to[6]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)) - 2*to[4]*(fr[0]*fr[6]*to[0] + fr[1]*fr[6]*to[1] + fr[2]*fr[6]*to[2] + fr[3]*fr[6]*to[3]))) + 2*v[5]*(cos_th*sin_th*(-fr[5]*to[6] + fr[6]*to[5]) - pow(sin_th, 2.0)*(fr[5]*fr[6]*pow(to[0], 2.0) + fr[5]*fr[6]*pow(to[1], 2.0) + fr[5]*fr[6]*pow(to[2], 2.0) + fr[5]*fr[6]*pow(to[3], 2.0) + fr[5]*fr[6]*pow(to[4], 2.0) - fr[5]*fr[6]*pow(to[5], 2.0) + fr[5]*fr[6]*pow(to[6], 2.0) + fr[5]*fr[6]*pow(to[7], 2.0) - 2*fr[6]*fr[7]*to[5]*to[7] + to[5]*to[6]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)) - 2*to[5]*(fr[0]*fr[6]*to[0] + fr[1]*fr[6]*to[1] + fr[2]*fr[6]*to[2] + fr[3]*fr[6]*to[3] + fr[4]*fr[6]*to[4]))) + v[6]*(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(4*fr[6]*fr[7]*to[6]*to[7] + pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)) - pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)) + 4*to[6]*(fr[0]*fr[6]*to[0] + fr[1]*fr[6]*to[1] + fr[2]*fr[6]*to[2] + fr[3]*fr[6]*to[3] + fr[4]*fr[6]*to[4] + fr[5]*fr[6]*to[5]) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0)))) - 2*v[7]*(cos_th*sin_th*(-fr[6]*to[7] + fr[7]*to[6]) + pow(sin_th, 2.0)*(fr[6]*fr[7]*pow(to[0], 2.0) + fr[6]*fr[7]*pow(to[1], 2.0) + fr[6]*fr[7]*pow(to[2], 2.0) + fr[6]*fr[7]*pow(to[3], 2.0) + fr[6]*fr[7]*pow(to[4], 2.0) + fr[6]*fr[7]*pow(to[5], 2.0) + fr[6]*fr[7]*pow(to[6], 2.0) - fr[6]*fr[7]*pow(to[7], 2.0) - to[7]*(2*fr[0]*fr[6]*to[0] + 2*fr[1]*fr[6]*to[1] + 2*fr[2]*fr[6]*to[2] + 2*fr[3]*fr[6]*to[3] + 2*fr[4]*fr[6]*to[4] + 2*fr[5]*fr[6]*to[5] - to[6]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) - pow(fr[6], 2.0) + pow(fr[7], 2.0))))))/(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))), (2*v[0]*(cos_th*sin_th*(-fr[0]*to[7] + fr[7]*to[0]) + pow(sin_th, 2.0)*(fr[0]*fr[7]*pow(to[0], 2.0) - fr[0]*fr[7]*pow(to[1], 2.0) - fr[0]*fr[7]*pow(to[2], 2.0) - fr[0]*fr[7]*pow(to[3], 2.0) - fr[0]*fr[7]*pow(to[4], 2.0) - fr[0]*fr[7]*pow(to[5], 2.0) - fr[0]*fr[7]*pow(to[6], 2.0) - fr[0]*fr[7]*pow(to[7], 2.0) + 2*fr[1]*fr[7]*to[0]*to[1] + 2*fr[2]*fr[7]*to[0]*to[2] + 2*fr[3]*fr[7]*to[0]*to[3] + 2*fr[4]*fr[7]*to[0]*to[4] + 2*fr[5]*fr[7]*to[0]*to[5] + 2*fr[6]*fr[7]*to[0]*to[6] - to[0]*to[7]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)))) + 2*v[1]*(cos_th*sin_th*(-fr[1]*to[7] + fr[7]*to[1]) - pow(sin_th, 2.0)*(-2*fr[0]*fr[7]*to[0]*to[1] + fr[1]*fr[7]*pow(to[0], 2.0) - fr[1]*fr[7]*pow(to[1], 2.0) + fr[1]*fr[7]*pow(to[2], 2.0) + fr[1]*fr[7]*pow(to[3], 2.0) + fr[1]*fr[7]*pow(to[4], 2.0) + fr[1]*fr[7]*pow(to[5], 2.0) + fr[1]*fr[7]*pow(to[6], 2.0) + fr[1]*fr[7]*pow(to[7], 2.0) - 2*fr[2]*fr[7]*to[1]*to[2] - 2*fr[3]*fr[7]*to[1]*to[3] - 2*fr[4]*fr[7]*to[1]*to[4] - 2*fr[5]*fr[7]*to[1]*to[5] - 2*fr[6]*fr[7]*to[1]*to[6] + to[1]*to[7]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)))) + 2*v[2]*(cos_th*sin_th*(-fr[2]*to[7] + fr[7]*to[2]) - pow(sin_th, 2.0)*(fr[2]*fr[7]*pow(to[0], 2.0) + fr[2]*fr[7]*pow(to[1], 2.0) - fr[2]*fr[7]*pow(to[2], 2.0) + fr[2]*fr[7]*pow(to[3], 2.0) + fr[2]*fr[7]*pow(to[4], 2.0) + fr[2]*fr[7]*pow(to[5], 2.0) + fr[2]*fr[7]*pow(to[6], 2.0) + fr[2]*fr[7]*pow(to[7], 2.0) - 2*fr[3]*fr[7]*to[2]*to[3] - 2*fr[4]*fr[7]*to[2]*to[4] - 2*fr[5]*fr[7]*to[2]*to[5] - 2*fr[6]*fr[7]*to[2]*to[6] + to[2]*to[7]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) - 2*to[2]*(fr[0]*fr[7]*to[0] + fr[1]*fr[7]*to[1]))) + 2*v[3]*(cos_th*sin_th*(-fr[3]*to[7] + fr[7]*to[3]) - pow(sin_th, 2.0)*(fr[3]*fr[7]*pow(to[0], 2.0) + fr[3]*fr[7]*pow(to[1], 2.0) + fr[3]*fr[7]*pow(to[2], 2.0) - fr[3]*fr[7]*pow(to[3], 2.0) + fr[3]*fr[7]*pow(to[4], 2.0) + fr[3]*fr[7]*pow(to[5], 2.0) + fr[3]*fr[7]*pow(to[6], 2.0) + fr[3]*fr[7]*pow(to[7], 2.0) - 2*fr[4]*fr[7]*to[3]*to[4] - 2*fr[5]*fr[7]*to[3]*to[5] - 2*fr[6]*fr[7]*to[3]*to[6] + to[3]*to[7]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) - 2*to[3]*(fr[0]*fr[7]*to[0] + fr[1]*fr[7]*to[1] + fr[2]*fr[7]*to[2]))) + 2*v[4]*(cos_th*sin_th*(-fr[4]*to[7] + fr[7]*to[4]) - pow(sin_th, 2.0)*(fr[4]*fr[7]*pow(to[0], 2.0) + fr[4]*fr[7]*pow(to[1], 2.0) + fr[4]*fr[7]*pow(to[2], 2.0) + fr[4]*fr[7]*pow(to[3], 2.0) - fr[4]*fr[7]*pow(to[4], 2.0) + fr[4]*fr[7]*pow(to[5], 2.0) + fr[4]*fr[7]*pow(to[6], 2.0) + fr[4]*fr[7]*pow(to[7], 2.0) - 2*fr[5]*fr[7]*to[4]*to[5] - 2*fr[6]*fr[7]*to[4]*to[6] + to[4]*to[7]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) - 2*to[4]*(fr[0]*fr[7]*to[0] + fr[1]*fr[7]*to[1] + fr[2]*fr[7]*to[2] + fr[3]*fr[7]*to[3]))) + 2*v[5]*(cos_th*sin_th*(-fr[5]*to[7] + fr[7]*to[5]) - pow(sin_th, 2.0)*(fr[5]*fr[7]*pow(to[0], 2.0) + fr[5]*fr[7]*pow(to[1], 2.0) + fr[5]*fr[7]*pow(to[2], 2.0) + fr[5]*fr[7]*pow(to[3], 2.0) + fr[5]*fr[7]*pow(to[4], 2.0) - fr[5]*fr[7]*pow(to[5], 2.0) + fr[5]*fr[7]*pow(to[6], 2.0) + fr[5]*fr[7]*pow(to[7], 2.0) - 2*fr[6]*fr[7]*to[5]*to[6] + to[5]*to[7]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) - 2*to[5]*(fr[0]*fr[7]*to[0] + fr[1]*fr[7]*to[1] + fr[2]*fr[7]*to[2] + fr[3]*fr[7]*to[3] + fr[4]*fr[7]*to[4]))) + 2*v[6]*(cos_th*sin_th*(-fr[6]*to[7] + fr[7]*to[6]) - pow(sin_th, 2.0)*(fr[6]*fr[7]*pow(to[0], 2.0) + fr[6]*fr[7]*pow(to[1], 2.0) + fr[6]*fr[7]*pow(to[2], 2.0) + fr[6]*fr[7]*pow(to[3], 2.0) + fr[6]*fr[7]*pow(to[4], 2.0) + fr[6]*fr[7]*pow(to[5], 2.0) - fr[6]*fr[7]*pow(to[6], 2.0) + fr[6]*fr[7]*pow(to[7], 2.0) + to[6]*to[7]*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) - 2*to[6]*(fr[0]*fr[7]*to[0] + fr[1]*fr[7]*to[1] + fr[2]*fr[7]*to[2] + fr[3]*fr[7]*to[3] + fr[4]*fr[7]*to[4] + fr[5]*fr[7]*to[5]))) + v[7]*(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) - pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) - pow(fr[7], 2.0)) + 4*to[7]*(fr[0]*fr[7]*to[0] + fr[1]*fr[7]*to[1] + fr[2]*fr[7]*to[2] + fr[3]*fr[7]*to[3] + fr[4]*fr[7]*to[4] + fr[5]*fr[7]*to[5] + fr[6]*fr[7]*to[6]))))/(pow(cos_th, 2.0) + 2*cos_th*sin_th*(fr[0]*to[0] + fr[1]*to[1] + fr[2]*to[2] + fr[3]*to[3] + fr[4]*to[4] + fr[5]*to[5] + fr[6]*to[6] + fr[7]*to[7]) + pow(sin_th, 2.0)*(pow(to[0], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[1], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[2], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[3], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[4], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[5], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[6], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)) + pow(to[7], 2.0)*(pow(fr[0], 2.0) + pow(fr[1], 2.0) + pow(fr[2], 2.0) + pow(fr[3], 2.0) + pow(fr[4], 2.0) + pow(fr[5], 2.0) + pow(fr[6], 2.0) + pow(fr[7], 2.0)))));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment