题解 | #点到直线距离#

点到直线距离

https://www.nowcoder.com/practice/1bcdd78060e54812a9c47ebe40c6af65

不妨将直线拆分成两点,然后我们以为起始点,分别向两点作向量
如下图所示,将向量记为,将向量记为


联立上面两个公式,有,然后就用一个计算叉积的函数和一个计算向量的模的长度的公式即可。

double getDistance(point P, line L){
    // TODO: 计算点P到直线L的距离
    auto A=L.point_A;
    auto B=L.point_B;
    point AB=point(B.x-A.x,B.y-A.y);
    point AP=point(P.x-A.x,P.y-A.y);
    auto dist=[&](point a, point b)->double{
        return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
    };
    auto cross=[&](point a,point b)->double{
        return (a.x*b.y-a.y*b.x); 
    };
    return abs(cross(AB,AP)/(dist(A,B)));
}

感谢指正,我当时写的啥呀,下次写之前一定会认真审一下的

全部评论
其实使用向量叉乘是对的,但是h=b*sinθ
2 回复 分享
发布于 2025-11-29 20:32 陕西
sin,cos分不清 那不就是面积除边长吗
2 回复 分享
发布于 2025-10-30 19:06 山西
方法很好,不过这里应该是点积,不是叉积
2 回复 分享
发布于 2025-09-28 17:54 辽宁
这么牛
2 回复 分享
发布于 2025-09-23 19:33 辽宁
二维向量叉乘公式a(x1,y1),b(x2,y2),a*b=x1*y2-x2*y1(标量),实际上可以当做三维向量a(x1,y1,0)与b(x2,y2,0)的叉乘,结果为(x1*y2-x2*y1)k(向量),由于一维向量意义不大,通常省去k把a*b视为标量
点赞 回复 分享
发布于 03-28 20:47 浙江
太牛了
点赞 回复 分享
发布于 2025-09-25 20:18 北京
软人解法
点赞 回复 分享
发布于 2025-09-24 16:05 辽宁

相关推荐

评论
10
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务