Esempio n. 1
0
        private void updateCachedVars()
        {
            CosPhi      = (float)Math.Cos(m_phi);
            SinPhi      = (float)Math.Sin(m_phi);
            SinPhiShift = (float)Math.Sin(m_phi + Offset);
            CosPhiShift = (float)Math.Cos(m_phi + Offset);
            CosRho      = (float)Math.Cos(m_rho);
            SinRho      = (float)Math.Sin(m_rho);
            // update top
            ILPoint3Df top = ILPoint3Df.normalize(-SinPhi * CosRho, CosPhi * CosRho, SinRho);

            m_topX = top.X;
            m_topY = top.Y;
            m_topZ = top.Z;

            computeQuadrant();
        }
Esempio n. 2
0
        /// <summary>
        /// rotate the vector, keep length
        /// </summary>
        /// <param name="normal">axis as rotation normal</param>
        /// <param name="angleDeg">angle to move (radian)</param>
        /// <returns>rotated version of this vector, does not change original vector</returns>
        public ILPoint3Df Spin(ILPoint3Df normal, float angleDeg)
        {
            float a    = angleDeg * (float)Math.PI / 180f;
            float cosa = (float)Math.Cos(a);
            float sina = (float)Math.Sin(a);

            normal = ILPoint3Df.normalize(normal);
            float      omincosa = 1 - cosa;
            ILPoint3Df ret      = new ILPoint3Df(
                (cosa + X * X * omincosa) * normal.X
                + (X * Y * omincosa - Z * sina) * normal.Y
                + (X * Z * omincosa + Y * sina) * normal.Z,

                (Y * X * omincosa + Z * sina) * normal.X
                + (cosa + Y * Y * omincosa) * normal.Y
                + (Y * Z * omincosa - X * sina) * normal.Z,

                (Z * X * omincosa - Y * sina) * normal.X
                + (Z * Y * omincosa + X * sina) * normal.Y
                + (cosa + Z * Z * omincosa) * normal.Z);

            return(ret);
        }