Ejemplo n.º 1
0
            /// <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);
            }
Ejemplo n.º 2
0
            /// <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);
            }