GLfloat* rotate(GLfloat *vecDest, GLfloat *vecSource, GLfloat *rot, GLfloat phi) { GLfloat result1[3], result2[3], result3[3], result4[3], result5[3], result6[3], result7[3]; add(add(scalMult(scalProd(rot, vecSource), rot, result1), scalMult(cos(phi*M_PI/180), vecProd( vecProd(rot, vecSource, result2), rot, result3), result4), result5), scalMult(sin(phi*M_PI/180), vecProd(rot, vecSource, result6), result7), vecDest); return vecDest; }
double H2TangentVector::scalProd(const std::vector<H2TangentVector> &V1, const std::vector<H2TangentVector> &V2) { assert(V1.size() == V2.size()); double out = 0.0; for (uint j=0;j<V1.size();++j) { out += scalProd(V1[j],V2[j]); } return out; }