Координаты проекции точки на прямую
От: SergeyLa  
Дата: 02.02.06 13:44
Оценка:
Привет всем!

Срочно нужен алгоритм, желательно в исходниках.

Прямоугольная система координат.
Прямая задана координатами двух точек. Точка задана координатами. Требуется получить координаты проекции точки на прямую. Срочно надо, а то сам бы разобрался.
Re: Координаты проекции точки на прямую
От: Mab Россия http://shade.msu.ru/~mab
Дата: 02.02.06 13:49
Оценка: 3 (1)
Здравствуйте, SergeyLa, Вы писали:
SL>Срочно надо, а то сам бы разобрался.
Срочно не срочно, но голову на плечах еще никто не отменял. Если прямая проходит через точки a и b, то ее параметрическое уравнение
p(t) = a + (b - a)*t

Условие, что параметр t дает проекцию точки c на прямую -- это ортогональность векторов b — a и p(t) — c:
(b - a)*(p(t) - c) = 0

Получаем линейное уравнение на t. Дальше, думаю, сам досчитаешь.
Re[2]: Координаты проекции точки на прямую
От: SergeyLa  
Дата: 02.02.06 14:00
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Здравствуйте, SergeyLa, Вы писали:

SL>>Срочно надо, а то сам бы разобрался.
Mab>Срочно не срочно, но голову на плечах еще никто не отменял. Если прямая проходит через точки a и b, то ее параметрическое уравнение
Mab>
Mab>p(t) = a + (b - a)*t
Mab>

Mab>Условие, что параметр t дает проекцию точки c на прямую -- это ортогональность векторов b — a и p(t) — c:
Mab>
Mab>(b - a)*(p(t) - c) = 0
Mab>

Mab>Получаем линейное уравнение на t. Дальше, думаю, сам досчитаешь.

До этого уровня я доходил

Только не через параметрическое уравнение прямой, а через обычное координатное. Хотелось бы готовый алгоритм со всеми
проверками на деление на нуль и т.д.
Re[3]: Координаты проекции точки на прямую
От: Dziman США http://github.com/Dziman
Дата: 02.02.06 14:09
Оценка:
Здравствуйте, SergeyLa, Вы писали:
SL>Только не через параметрическое уравнение прямой, а через обычное координатное. Хотелось бы готовый алгоритм со всеми
SL>проверками на деление на нуль и т.д.
Это уже не алгоритм, а его реализация.
... << RSDN@Home 1.2.0 alpha rev. 619>>
С уважением, Dziman
Re[4]: Координаты проекции точки на прямую
От: SergeyLa  
Дата: 02.02.06 14:13
Оценка:
Здравствуйте, Dziman, Вы писали:

D>Здравствуйте, SergeyLa, Вы писали:

SL>>Только не через параметрическое уравнение прямой, а через обычное координатное. Хотелось бы готовый алгоритм со всеми
SL>>проверками на деление на нуль и т.д.
D>Это уже не алгоритм, а его реализация.

Согласен. Хотелось бы готовую реализацию со всеми проверками на деление на нуль и т.д.
Re: Координаты проекции точки на прямую
От: Кирилл Осенков Украина
Дата: 10.02.06 15:41
Оценка: 1 (1)
Здравствуйте, SergeyLa, Вы писали:

SL>Прямая задана координатами двух точек. Точка задана координатами. Требуется получить координаты проекции точки на прямую.


Такое подойдёт?

Public Function GetPerpPoint(ByVal X As Double, ByVal Y As Double, ByVal XM As Double, ByVal YM As Double, ByVal XN As Double, ByVal YN As Double) As Point
    Dim A As Double, B As Double, C As Double, m As Double
    Dim P As Point

    If YN = YM Then
        P.X = X
        P.Y = YM
    ElseIf XM = XN Then
        P.X = XM
        P.Y = Y
    Else
        A = (X - XM) * (X - XM) + (Y - YM) * (Y - YM)
        B = (X - XN) * (X - XN) + (Y - YN) * (Y - YN)
        C = (XM - XN) * (XM - XN) + (YM - YN) * (YM - YN)
        If C <> 0 Then
            m = (A + C - B) / (2 * C)
            P.X = XM + (XN - XM) * m
            P.Y = YM + (YN - YM) * m
        Else
            P.X = XM
            P.Y = YM
        End If
    End If

    Return P
End Function
Re: Координаты проекции точки на прямую
От: SergeyLa  
Дата: 13.02.06 10:59
Оценка:
Здравствуйте, SergeyLa, Вы писали:

SL>Привет всем!


SL>Срочно нужен алгоритм, желательно в исходниках.


SL>Прямоугольная система координат.

SL>Прямая задана координатами двух точек. Точка задана координатами. Требуется получить координаты проекции точки на прямую. Срочно надо, а то сам бы разобрался.


/// <summary>
/// Finds projection of the p to line. {p1;p2} defines line
/// </summary>
/// <param name="p">Point to project</param>
/// <param name="p1">First point of line segment</param>
/// <param name="p2">Second point of line segment</param>
/// <returns></returns>
public static PointF GetProjection(PointF p, PointF p1, PointF p2)
{
    float fDenominator = (p2.X - p1.X)*(p2.X - p1.X) + (p2.Y - p1.Y)*(p2.Y - p1.Y);
    if (fDenominator == 0) // p1 and p2 are the same
        return p1;

    float t = (p.X*(p2.X - p1.X) - (p2.X - p1.X)*p1.X + p.Y*(p2.Y - p1.Y) - (p2.Y - p1.Y)*p1.Y) / fDenominator;

    return new PointF(p1.X + (p2.X - p1.X)*t, p1.Y + (p2.Y - p1.Y)*t);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.