public void Update()
    {
        m_phase = 0.5f * Mathf.Sin(Time.timeSinceLevelLoad * MathUtil.Pi) + 0.5f;

        Vector3    twistAxis = m_rotInit * Vector3.up;
        Quaternion swing;
        Quaternion twist;

        QuaternionUtil.Sterp(m_rotInit, m_rotEnd, twistAxis, m_phase, out swing, out twist);

        switch (m_state)
        {
        case State.InitEnd:
        {
            m_rot0 = m_rotInit;
            m_rot1 = m_rotEnd;
            break;
        }

        case State.Comparison:
        {
            m_rot0 = Quaternion.Slerp(m_rotInit, m_rotEnd, m_phase);
            m_rot1 = swing * twist * m_rotInit;
            break;
        }

        /*
         * case State.TwistSwingTrajectory:
         * {
         * m_rot0 = Quaternion.Slerp(m_rotInit, m_rotEnd, m_phase);
         * m_rot1 = swing * twist * m_rotInit;
         *
         * const int kQueueCapacity = 20;
         * if (m_trajectory0.Count >= kQueueCapacity)
         *  m_trajectory0.Dequeue();
         * m_trajectory0.Enqueue(m_pos0 + m_rot0 * ((kRodLegnth - 0.5f * kRodThickness) * Vector3.up));
         * if (m_trajectory1.Count >= kQueueCapacity)
         *  m_trajectory1.Dequeue();
         * m_trajectory1.Enqueue(m_pos1 + m_rot1 * ((kRodLegnth - 0.5f * kRodThickness) * Vector3.up));
         *
         * Queue<Vector3> [] aTrajectory = { m_trajectory0, m_trajectory1 };
         * foreach (Queue<Vector3> trajectory in aTrajectory)
         * {
         *  Vector3 p0 = trajectory.Peek();
         *  foreach (Vector3 p1 in trajectory)
         *  {
         *    DebugUtil.DrawSphere(p0, 0.01f, 16, 32, Color.white, false, DebugUtil.Style.FlatShaded);
         *    DebugUtil.DrawCylinder(p0, p1, 0.005f, 16, Color.white, false, DebugUtil.Style.FlatShaded);
         *    p0 = p1;
         *  }
         * }
         *
         * break;
         * }
         */
        case State.TwistSwing:
        {
            m_rot0 = swing * m_rotInit;
            m_rot1 = twist * m_rotInit;
            break;
        }
        }

        DrawRod(m_pos0, m_rot0);
        DrawRod(m_pos1, m_rot1);

        if (Input.GetKeyDown(KeyCode.Space))
        {
            ++m_state;
            if (m_state >= State.Count)
            {
                m_state = 0;
            }
        }
    }