示例#1
0
 /// <summary>
 /// Угол, отсчитанный от первого вектора ко второму против часовой стрелки
 /// </summary>
 /// <param name="v1">первый вектор</param>
 /// <param name="v2">второй вектор</param>
 /// <returns>угол в радианах из интервала (-pi, +pi]</returns>
 public static double AngleBetween(Vector v1, Vector v2)
 {
     Vector vn1 = v1.Normalise();
     Vector n1 = Vector.LeftNormal(vn1);
     Vector vn2 = v2.Normalise();
     double sc = vn1 * vn2;
     double ht = n1 * vn2;
     return (ht >= 0) ? Math.Acos(sc) : -Math.Acos(sc);
 }
示例#2
0
        /// <summary>
        /// Угол, отсчитанный от первого вектора ко второму против часовой стрелки
        /// </summary>
        /// <param name="v1">первый вектор</param>
        /// <param name="v2">второй вектор</param>
        /// <returns>угол в радианах из интервала (-pi, +pi]</returns>
        public static double AngleBetween(Vector v1, Vector v2)
        {
            Vector vn1 = v1.Normalise();
            Vector n1  = Vector.LeftNormal(vn1);
            Vector vn2 = v2.Normalise();
            double sc  = vn1 * vn2;
            double ht  = n1 * vn2;

            return((ht >= 0) ? Math.Acos(sc) : -Math.Acos(sc));
        }
示例#3
0
        /// <summary>
        /// Угол, отсчитанный от орта оси X к данному вектору против часовой стрелки
        /// </summary>
        /// <param name="v"> вектор</param>
        /// <returns>угол в радианах из интервала (-pi, +pi]</returns>
        public static double AngleFromXOrto(Vector v)
        {
            Vector vn = v.Normalise();

            return((vn.Y >= 0) ? Math.Acos(vn.X) : -Math.Acos(vn.X));
        }
示例#4
0
 /// <summary>
 /// Угол, отсчитанный от орта оси X к данному вектору против часовой стрелки
 /// </summary>
 /// <param name="v"> вектор</param>
 /// <returns>угол в радианах из интервала (-pi, +pi]</returns>
 public static double AngleFromXOrto(Vector v)
 {
     Vector vn = v.Normalise();
     return (vn.Y >= 0) ? Math.Acos(vn.X) : -Math.Acos(vn.X);
 }