其思路是巧妙使用直线上两个点进行计算。

方法一:

如下图所示,在直线L上取两点,则得到向量构成向量,根据下式计算得到两向量夹角。那么到直线L的距离为

方法二:

使用向量叉乘得到

基于方法一的代码如下:

double Point2Line3DSin(LinePara3D line, pcl::PointXYZ point)
{//直线的法向量(p,q,r)double p = line.LineNormal.normalX;double q = line.LineNormal.normalY;double r = line.LineNormal.normalZ;//直线上的2个点double x1 = line.point.x;double y1 = line.point.y;double z1 = line.point.z;double x2 = 1; //令第2个点的x=1double y2 = y1 - x1*q / p + q / p;double z2 = z1 - x1*r / p + r / p;//两个向量:参考博客中的绘图//p1p2double normal01_x = x2 - x1;double normal01_y = y2 - y1;double normal01_z = z2 - z1;//p1p0 (p0为待求点到直线距离的那个点)double normal02_x = point.x - x1;double normal02_y = point.y - y1;double normal02_z = point.z - z1;//求取两个向量的夹角:弧度double fenzi = normal01_x*normal02_x + normal01_y*normal02_y + normal01_z*normal02_z;double lengthN1 = sqrt(normal01_x*normal01_x + normal01_y*normal01_y + normal01_z*normal01_z);double lengthN2 = sqrt(normal02_x*normal02_x + normal02_y*normal02_y + normal02_z*normal02_z);double hudu = acos(fenzi / (lengthN1*lengthN2));//再求取点到直线的距离double ds = abs(lengthN2*sin(hudu));return ds;}

基于方法二的代码如下:

double Point2Line3DVecproduct(LinePara3D line, pcl::PointXYZ point)
{//直线的法向量(p,q,r)double p = line.LineNormal.normalX;double q = line.LineNormal.normalY;double r = line.LineNormal.normalZ;//直线上的2个点double x_q = line.point.x;double y_q = line.point.y;double z_q = line.point.z;double x_b = 1; //令第2个点的x=1double y_b = y_q - x_q*q / p + q / p;double z_b = z_q - x_q*r / p + r / p;double x_o = point.x;double y_o = point.y;double z_o = point.z;//两个向量//oqdouble normal01_x = x_q - x_o;double normal01_y = y_q - y_o;double normal01_z = z_q - z_o;//obdouble normal02_x = x_b - x_o;double normal02_y = y_b - y_o;double normal02_z = z_b - z_o;//oq与ob进行叉乘double chacheng_x = normal01_y*normal02_z - normal02_y*normal01_z;double chacheng_y = normal02_z*normal01_x - normal02_x*normal01_z;double chacheng_z = normal01_x*normal02_y - normal01_y*normal02_x;double chacheng_length = sqrt(chacheng_x*chacheng_x + chacheng_y*chacheng_y + chacheng_z*chacheng_z);double dx = x_q - x_b;double dy = y_q - y_b;double dz = z_q - z_b;double qb_length = sqrt(dx*dx+dy*dy+dz*dz);double ds = chacheng_length / qb_length;return ds;}

测试代码如下:

void main()
{MyBoundary BounExample;LinePara3D line;line.LineNormal.normalX = 1;line.LineNormal.normalY = -4;line.LineNormal.normalZ = 2;line.point.x = 2;line.point.y = -1;line.point.z = 6;pcl::PointXYZ p;p.x = 4;p.y = 5;p.z = 6;double ds = BounExample.Point2Line3DSin(line, p);cout << "使用方法一计算得到的距离ds=" << ds << endl;double ds1 = BounExample.Point2Line3DVecproduct(line, p);cout << "使用方法二(叉乘)计算得到的距离" << ds1 << endl;system("pause");
}

具体参考matlab中推导:https://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html

参考博客:https://blog.csdn.net/lcfactorization/article/details/53285631

三维空间内点到直线的距离计算公式相关推荐

  1. python 求平面两点距离_Python求平面内点到直线距离的实现

    近期遇到个问题,需要计算平面内点到直线的距离,发现数学知识都还给老师了,度娘后找到计算方法,特此记录. 点到直线的计算公式: 通过公式推导,得到信息: A:直线斜率 B:固定值-1 C:直线截距b 转 ...

  2. python计算点到直线的距离_Python求平面内点到直线距离的实现

    近期遇到个问题,需要计算平面内点到直线的距离,发现数学知识都还给老师了,度娘后找到计算方法,特此记录. 点到直线的计算公式: 通过公式推导,得到信息: a:直线斜率 b:固定值-1 c:直线截距b 转 ...

  3. 点到直线的距离计算原理及MATLAB程序

    在二维和三维空间,有现成的计算点到空间直线的距离的公式: 如: 三维空间有类似的计算公式. 甚至博客直接提出用叉乘和行列式计算点到直线距离的计算方法和程序.但仅限于二维和三维的情况.更高维的就不适用. ...

  4. 空间点到直线的距离(hdu1174 爆头)

    爆头 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  5. 爆头(叉乘求点到直线的距离)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission ...

  6. 点到直线的距离c语言程序,计算几何算法2. 关于线和点到线的距离(二维和三维)...

    关于直线 直线方程 点到直线的距离 用两点表示的直线 2d隐式表示的直线的情形 参数方程表示的直线 一个点到射线或线段的距离 代码实现 距离计算是计算机图形学和计算几何的基本问题,而且有很多关于这方面 ...

  7. 已知空间一点到另外两点直线的距离

    转自:http://www.cnblogs.com/clarkustb/archive/2008/11/04/1326500.html 已知空间一点到另外两点直线的距离 设空间中的三点为M1,M2,M ...

  8. 过直线上一点画垂线图_苏教版四年级数学上册8.5认识垂直、点到直线的距离微课视频 | 练习...

    微课视频第一课时 微课视频第二课时 同步练习 参考答案 教学设计 垂直 教材第89~91页的内容. 1.结合实际情境和操作活动,认识垂直. 2.能借助直尺.三角尺.量角器等工具画出已知直线的垂线,并理 ...

  9. 点到线段的距离_直线垂直,垂线的性质,点到直线的距离

    欢迎关注公z号:沈阳奥数 两条直线相交所成的四个角中,有一个角是直角时,就说这两条直线互相垂直,其中一条直线叫做另一条直线的垂线,它们的交点叫垂足. 如图,直线AB与CD垂直于点E,记作:AB⊥CD于 ...

  10. 点到直线的距离c语言程序,点到线段的距离 题解(C++)

    初步分析 这道题之前有<点到直线的距离>一题. 如图,我们不妨来下个定义(名字是乱起的,如果有雷同就以以下定义为准): 对于任意线段l,在其两个端点上分别作垂直于l的直线,若点在两直线之间 ...

最新文章

  1. Spring Boot修改启动端口
  2. UIView的AddChildViewCtroller的用法(4中页面切换方式)
  3. 马云携阿里17位创始人及合伙人捐赠浙大一院5.6亿,杭州渐成中国硅谷
  4. occam‘s razor
  5. 【最后一天倒计时】你离¥399网易黑猪肉券就差一步
  6. ffmpeg 源码学习之seek play
  7. java8默认内存收集器_使用正确的垃圾收集器将Java内存使用量降至最低
  8. 就国内某个程序员问答网站的简单的分析
  9. oracle 11g r2版本号,Oracle 11g r2新增版本功能(二)
  10. 机器人炒饭小块头一一_一罐好饭,智能机器人炒饭出好味道,小块头坚守本心匠心制作!...
  11. java学习4-Maven的发布war并部署到tomcat
  12. 赛锐信息:SAP安全漏洞审计及工具介绍
  13. 碰到一个摄像头预览画面跳帧的安卓设备
  14. 哈尔滨理工大学matlab,微软用户-Matlab软件简介哈尔滨理工大学数学建模组ppt课件...
  15. 丝滑!CVPR 2021 视频插帧论文+开源代码汇总
  16. miui11升级鸿蒙,MIUI11新版本推送 GPU驱动更新 小米10 Pro跑分轻松突破60万
  17. 智能窗帘研究制作_智能窗帘的制作方法
  18. 旅行商问题(动态规划_爬山算法_遗传算法)
  19. vue 项目进行直播视频 vue-video-player
  20. 高校实验室安全考试题库 辅助软件

热门文章

  1. 整理了20个最全的设计师学习网站,推荐收藏!
  2. 来了!Python 官方发布整套中文PDF文档(共27本)
  3. Linux最基础知识整理
  4. python第三方库官方文档汇总
  5. 2020.10.12--PS--制作图章、抽出滤镜、消失点
  6. 大厂必背 MySQL最新面试题 - MySQL数据库优化
  7. 斗鱼服务器维护不能改名,斗鱼tv怎么改名字-斗鱼tv修改昵称的方法 - 河东软件园...
  8. 怎么使用svn下载到本地
  9. 通达信最新 行情服务器,通达信行情服务器数据
  10. 什么是数据脱敏,数据脱敏有哪些方式