bool TET::restBaryCenter(const VEC3F& vert, QUATERNION& lambda) { VEC3F row[3]; row[0] = *(_restVertices[0]) - *(_restVertices[3]); row[1] = *(_restVertices[1]) - *(_restVertices[3]), row[2] = *(_restVertices[2]) - *(_restVertices[3]); MATRIX3 T; T << row[0][0], row[1][0], row[2][0], row[0][1], row[1][1], row[2][1], row[0][2], row[1][2], row[2][2]; VEC3F lambda0_3 = T.inverse() * (vert - *(_restVertices[3])); lambda.x() = lambda0_3[0]; lambda.y() = lambda0_3[1]; lambda.z() = lambda0_3[2]; lambda.w() = 1.0 - lambda.x() - lambda.y() - lambda.z(); if(!( 0 <= lambda.x() && lambda.x() <= 1 && 0 <= lambda.y() && lambda.y() <= 1 && 0 <= lambda.z() && lambda.z() <= 1 && 0 <= lambda.w() && lambda.w() <= 1) ) return false; return true; }
int CurvilinearGrid:: inverse_jacobian_t(MATRIX3& mi, double r, double s, double t) { VECTOR3 dxyzdr = xyz_r + s*xyz_rs + t*xyz_rt + s*t*xyz_rst; VECTOR3 dxyzds = xyz_s + r*xyz_rs + t*xyz_st + r*t*xyz_rst; VECTOR3 dxyzdt = xyz_t + r*xyz_rt + s*xyz_st + r*s*xyz_rst; MATRIX3 m(dxyzdr, dxyzds, dxyzdt); MATRIX3 tm = m.transpose(); tm.inverse(mi); return 1; }