Ejemplo n.º 1
0
        /// <summary>
        /// Проверяет, пересекает ли отрезок с переданными концами это тело.
        /// </summary>
        ///
        /// <param name="cs1"> Система координат, в которой задается vector1.</param>м
        /// <param name="cs2"> Система координат, в которой задается vector2.</param>
        /// <param name="vector1"> Конец отрезка, заданный в системе координат cs1. Если равен null, то принимается за нулевой вектор.</param>
        /// <param name="vector2"> Конец отрезка, заданный в системе координат cs2. Если равен null, то принимается за нулевой вектор.</param>
        ///
        /// <returns>
        /// true, если пересекает, false — если нет.
        /// </returns>
        public static bool IsCrossing(CoordinateSystem cs1, CoordinateSystem cs2,
                                      Vector vector1 = null, Vector vector2 = null)
        {
            if (cs1 == null)
            {
                throw new ArgumentNullException("body1 mustn't be null");
            }
            if (cs2 == null)
            {
                throw new ArgumentNullException("body2 mustn't be null");
            }

            Vector v1 = cs1.GetVectorFromRoot(vector1);
            Vector v2 = cs2.GetVectorFromRoot(vector2);

            foreach (Body body in Body.Bodies)
            {
                if (body.VectorFromRoot != v1 && body.VectorFromRoot != v2 &&
                    body.IsCrossing(cs1.ConvertTo(body, vector1), cs2.ConvertTo(body, vector2)))
                {
                    return(true);
                }
            }

            return(false);
        }
        /// <summary>
        /// Переводит вектор point, заданный в этой системе координат в систему координат System.
        /// </summary>
        ///
        /// <param name="system"> Новая система координат.</param>
        /// <param name="point"> Переводимый вектор. Если отсутствует, то принимается за нулевой вектор.</param>
        ///
        /// <returns>
        /// Переведенный вектор.
        /// </returns>
        ///
        /// <exception cref="ArgumentNullException">
        /// Вызывается при передаче null в параметр system.
        /// </exception>
        public Vector ConvertTo(CoordinateSystem system, Vector point = null)
        {
            if (system == null)
            {
                throw new ArgumentNullException("system mustn't be null");
            }

            if (point == null)
            {
                point = new Vector(0.0, 0.0, 0.0);
            }

            return(system.TransitionMatrixRelativelyRoot.Inversed * (GetVectorFromRoot(point) - system.GetVectorFromRoot()));
        }