Продлить отрезок - C#

Узнай цену своей работы

Формулировка задачи:

Столкнулся с интересной задачкой, необходимо продлить отрезок на 20 пикселей в обе стороны построенный по двум точкам. Как это можно реализовать?

Решение задачи: «Продлить отрезок»

textual
Листинг программы
/// <summary>
/// Увеличение отрезка на заданную величину в обе стороны
/// </summary>
/// <param name="start">Начальная точка отрезка</param>
/// <param name="end">Конечная точка отрезка</param>
/// <param name="length">Длина, на которую нужно увеличить отрезок</param>
/// <returns>Возвращает две точки — новые координаты отрезка</returns>
Tuple<PointF, PointF> ResizeLine(PointF start, PointF end, float length)
{
    //Считаем вектор
    var v = new PointF(end.X - start.X, end.Y - start.Y);
    //Длина вектора
    var l = (float)Math.Sqrt(v.X * v.X + v.Y * v.Y);
    //Нормирование
    v = new PointF(v.X / l, v.Y / l);
    //Новые координаты отрезка
    var newStart = new PointF(start.X - v.X * length, start.Y - v.Y * length);
    var newEnd = new PointF(end.X + v.X * length, end.Y + v.Y * length);
    return new Tuple<PointF, PointF>(newStart, newEnd);
}

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы