已知一个点和一个线段,求点到线段的垂足

124 阅读1分钟

原理推导我也不记得了,只剩下了这个代码片段,临时用用还是可以的

QPointF CMeasureAlgorithm::perpendicularFoot(const QPointF& p, const QLineF & l)
{
    if (!MA_IS_DOUBLE_ZERO(l.length()))
    {
        auto dotmultiply = ( p.x() - l.p1().x() ) * ( l.p2().x() - l.p1().x() ) + ( p.y() - l.p1().y() ) * ( l.p2().y() - l.p1().y() );
        auto relation = dotmultiply / ( ( l.p2().x() - l.p1().x() ) * ( l.p2().x() - l.p1().x() ) + ( l.p2().y() - l.p1().y() ) * ( l.p2().y() - l.p1().y() ) );

        return QPointF(l.p1().x() + relation * ( l.p2().x() - l.p1().x() ), l.p1().y() + relation * ( l.p2().y() - l.p1().y() ));
    }
    else
    {
        return QPointF();
    }
}


基于Qt实现