/// <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; }
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 )); }
/// <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); }