示例#1
0
        /// <summary>
        /// Разворачивает сегмент в обе стороны до указанной длины.
        /// </summary>
        /// <param name="aA">Первая точка отрезка.</param>
        /// <param name="aB">Вторая точка отрезка.</param>
        /// <param name="aC">Первая точка нового отрезка.</param>
        /// <param name="aD">Вторая точка нового отрезка.</param>
        /// <param name="aLenght">Длина на которую необходимо увеличить сегмент.</param>
        public static void ExpandSegment(Vector2 aA, Vector2 aB, out Vector2 aC, out Vector2 aD, float aLenght)
        {
            var lenAB = AntMath.Distance(aA, aB);

            aC.x = aB.x + (aB.x - aA.x) / lenAB * aLenght;
            aC.y = aB.y + (aB.y - aA.y) / lenAB * aLenght;
            aD.x = aA.x + (aA.x - aB.x) / lenAB * aLenght;
            aD.y = aA.y + (aA.y - aB.y) / lenAB * aLenght;
        }
示例#2
0
        public static Vector2 ExpandSegment(Vector2 aA, Vector2 aB, float aLenght)
        {
            var lenAB = AntMath.Distance(aA, aB);

            return(new Vector2(
                       aB.x + (aB.x - aA.x) / lenAB * aLenght,
                       aB.y + (aB.y - aA.y) / lenAB * aLenght
                       ));
        }
示例#3
0
        /// <summary>
        /// Находит ближайшую точку сегмента к указанной точке.
        /// </summary>
        /// <param name="aPoint">Точка ближайшую к которой необходимо найти.</param>
        /// <param name="aA">Первая точка отрезка.</param>
        /// <param name="aB">Вторая точка отрезка.</param>
        /// <returns>Возвращает ближайшую точку из отрезка к указанной.</returns>
        // public static Vector2 GetNearestPointFromSegment(Vector2 aPoint, Vector2 aA, Vector2 aB)
        // {
        //  var a = aPoint.x - aA.x;
        //  var b = aPoint.y - aA.y;
        //  var c = aB.x - aA.x;
        //  var d = aB.y - aA.y;

        //  var dot = a * c + b * d;
        //  var lenSq = c * c + d * d;
        //  var param = -1.0f;
        //  if (!AntMath.Equal(lenSq, 0.0f))
        //  {
        //      // In case of zero length line.
        //      param = dot / lenSq;
        //  }

        //  var result = Vector2.zero;
        //  if (param < 0.0f)
        //  {
        //      result.x = aA.x;
        //      result.y = aA.y;
        //  }
        //  else if (param > 1.0f)
        //  {
        //      result.x = aB.x;
        //      result.y = aB.y;
        //  }
        //  else
        //  {
        //      result.x = aA.x + param * c;
        //      result.y = aA.x + param * d;
        //  }

        //  return result;
        // }

        public static Vector2 GetNearestPointFromSegment(Vector2 aPoint, Vector2 aA, Vector2 aB)
        {
            return((AntMath.Distance(aPoint, aA) < AntMath.Distance(aPoint, aB)) ? aA : aB);
        }