/// <summary> /// 转换为欧拉角表示形式的外方元素 /// </summary> /// <returns></returns> public OutsideElement ToOutElem3() { OutsideElement oe = new OutsideElement(); oe.Spos = Spos.Clone(); oe.omega = Math.Asin(-2 * (q2 * q3 - q0 * q1)); if (oe.omega < -Math.PI) { oe.omega += 2 * Math.PI; } oe.phi = Math.Atan2(-2 * (q1 * q3 + q0 * q2) * Math.Cos(oe.omega), (q0 * q0 - q1 * q1 - q2 * q2 + q3 * q3) * Math.Cos(oe.omega)); if (oe.phi < -Math.PI) { oe.phi += 2 * Math.PI; } oe.kappa = Math.Atan2(2 * (q1 * q2 + q0 * q3) * Math.Cos(oe.omega), (q0 * q0 - q1 * q1 + q2 * q2 - q3 * q3) * Math.Cos(oe.omega)); if (oe.kappa < -Math.PI) { oe.kappa += 2 * Math.PI; } return(oe); }
/// <summary> /// 转换为四元数形式??? /// </summary> /// <returns></returns> public OutElement4 ToOutElem4() { OutElement4 oe = new OutElement4(); oe.Spos = Spos.Clone(); double cosp = Math.Cos(GetRad(phi) / 2), sinp = Math.Sin(GetRad(phi) / 2), coso = Math.Cos(GetRad(omega) / 2), sino = Math.Sin(GetRad(omega) / 2), cosk = Math.Cos(GetRad(kappa) / 2), sink = Math.Sin(GetRad(kappa) / 2); oe.q2 = sinp * coso * cosk + cosp * sino * sink; oe.q1 = cosp * sino * cosk - sinp * coso * sink; oe.q3 = cosp * coso * sink + sinp * sino * cosk; oe.q0 = cosp * coso * cosk - sinp * sino * sink; return(oe); }