vc++ 求点到直线的最短距离及垂足
发布日期:2021-05-10 00:56:52 浏览次数:14 分类:精选文章

本文共 1275 字,大约阅读时间需要 4 分钟。

???????

???????????? $(x_1, y_1)$ ? $(x_2, y_2)$???????????????????????

  • ??????? $k$ ??????? [ k = \frac{y_2 - y_1}{x_2 - x_1} ] ? $x_1 = x_2$ ??????????????? 10000????????????

  • ??????????????? [ y - y_1 = k(x - x_1) ] ?????? [ y = kx - kx_1 + y_1 ] ????????? $Ax + By + C = 0$? [ kx - y + (y_1 - kx_1) = 0 ] ????????? [ A = k, \quad B = -1, \quad C = y_1 - kx_1 ]

  • ???????

  • ?????????? ??? $(x_0, y_0)$????? $Ax + By + C = 0$ ??? $d$ ?? [ d = \frac{|Ax_0 + By_0 + C|}{\sqrt{A^2 + B^2}} ]

  • ?????????? $P(p_x, p_y)$??? [ p_x = \frac{B(Bx_0 - Ay_0) - AC}{A^2 + B^2} ] [ p_y = \frac{A(-Bx_0 + Ay_0) - BC}{A^2 + B^2} ]

  • ????

    function getDistanceP2L(point, line) {
    const x1 = line.startPoint.x;
    const y1 = line.startPoint.y;
    const x2 = line.endPoint.x;
    const y2 = line.endPoint.y;
    const x0 = point.x;
    const y0 = point.y;
    // ???????????
    const k = x1 === x2 ? 10000 : (y2 - y1) / (x2 - x1);
    const a = k;
    const b = -1;
    const c = y1 - k * x1;
    // ????
    const d = Math.abs(a * x0 + b * y0 + c) / Math.sqrt(a * a + b * b);
    // ??????
    const px = (b * b * x0 - a * b * y0 - a * c) / (a * a + b * b);
    const py = (a * a * y0 - a * b * x0 - b * c) / (a * a + b * b);
    return [d, new Point(px, py)];
    }

    ?????????????????????????????????

    上一篇:error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”
    下一篇:OpenGL ES 实现瘦脸大眼效果

    发表评论

    最新留言

    哈哈,博客排版真的漂亮呢~
    [***.90.31.176]2025年04月13日 17时46分33秒