// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void OrientationMath::AxisAngletoHomochoric(float w, float n1, float n2, float n3, float& r1, float& r2, float& r3) { // Bring omega into proper range. Mod<float> mod; w = mod.WrapTwoPI(w); float denom = 0.0f; denom = (n1 * n1) + (n2 * n2) + (n3 * n3); denom = sqrt(denom); if(denom == 0.0) { r1 = 0.0, r2 = 0.0, r3 = 0.0; return; } n1 = n1 / denom; n2 = n2 / denom; n3 = n3 / denom; if (w >= 0.0f && w < DREAM3D::Constants::k_Pi) { float temp = powf(((0.75f) * (w - sinf(w))), DREAM3D::Constants::k_1Over3); r1 = n1 * temp; r2 = n2 * temp; r3 = n3 * temp; } else { float temp = powf(((0.75f) * (DREAM3D::Constants::k_2Pi - w + sinf(w))), DREAM3D::Constants::k_1Over3); r1 = n1 * temp; r2 = n2 * temp; r3 = n3 * temp; } }