计算空间中一点到直线距离(附源码)

本文介绍了如何使用C++计算空间中一点到直线的距离,详细阐述了等面积法和向量法的原理,并提供了相应的C++源码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.原理推导

  给定空间中的一点P(x,y,z)和直线L上两点A(x1,y1,z1)、B(x2,y2,z2),计算P点到直线的距离。

2.求解方法

2.1等面积法

图1
取点P’为P在AB上的垂足,由向量法计算平行四边形面积公式可知
在这里插入图片描述
由此,可推出P到直线AB的距离d为
在这里插入图片描述

C++代码如下:

float computeDistancePointAndLine(const Eigen::Vector3f point,
                                  const Eigen::Vector3f lineBegin,
                                  const Eigen::Vector3f lineEnd)
{
    //直线方向向量
    Eigen::Vector3f line_dir = lineEnd -lineBegin;

    //直线上某一点的向量到点的向量
    Eigen::Vector3f line_start_to_point = point - lineBegin;

    Eigen::Vector3f cross_dir = line_dir.cross(line_start_to_point);
    return cross_dir.norm() / line_dir.norm();
}

2.2向量法

设向量AB与向量AP的夹角为θ,由向量乘法运算法则可知
在这里插入图片描述
由此,可推出P到直线AB的距离d为
在这里插入图片描述
C++代码如下:

float computeDistancePointAndLine(const Eigen::Vector3f point,
                                  const Eigen::Vector3f lineBegin,
                                  const Eigen::Vector3f lineEnd)
{
    //直线方向向量
    Eigen::Vector3f line_dir = lineEnd -lineBegin;

    //直线上某一点的向量到点的向量
    Eigen::Vector3f line_start_to_point = point - lineBegin;

    Eigen::Vector3f dot_dir = line_dir.dot(line_start_to_point);
    return dot_dir .norm() / line_dir.norm();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cynthia.Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值