计算几何之 点到直线的距离&点到线段的距离 代码模板与证明
创作时间:
作者:
@小白创作中心
计算几何之 点到直线的距离&点到线段的距离 代码模板与证明
引用
CSDN
1.
https://blog.csdn.net/qq_45735851/article/details/114448767
点到直线的距离
已知直线上两点a、b,和直线外一点p,求p到直线ab的距离。
代码模板:
double distance_line(Point p,Point a,Point b)
{
Vector v1 = b - a,v2 = p - a;
return fabs(cross(v1,v2) / len(v1)); //cross是v1和v2的叉积
}
证明:
这里的v1是直线上的一个向量,v2是v1同起点,指向直线外点p的向量,p到直线的距离就等于两向量的叉积除以v1的模。这里两向量的叉积就是三角形PAB的面积的两倍,就等于底乘高,然后面积除以底就是高,底就是AB就是v1的模,高就是我们要求的距离,如下图:
点到线段的距离
已知线段AB和线段外一点P,求P到线段AB的距离
代码模板:
double distance_segment(Point p,Point a,Point b)
{
if(a == b)
return len(p-a);
Vector v1 = b - a,v2 = p - a,v3 = p - b;
if(dot(v1,v2) < 0) //dot是v1和v2的点积
return len(v2);
if(dot(v1,v3) > 0)
return len(v3);
return distance_lint(p,a,b);
}
证明:
点到线段的距离和点到直线的距离有一些不一样。点到线段的距离分三种情况,P在线段AB的左边、右边和中间,如下图:
首先判断若AB是同一点的话,P到线段AB的距离就是PA的长度,否则,分如下三种情况:
热门推荐
老人言:“春吃根,胜人参”!这5种根菜别错过,滋阴润燥营养高
肝虚的人,一般都有哪些症状?吃什么能补肝气?
看血红蛋白可以判断贫血吗
大蒜能预防感冒、帮助减肥!了解大蒜8大功效、食用禁忌再推荐你3道大蒜料理
老年人吃什么保健品对心脑血管好
如何解决汽车导航关不了的问题?这种问题对驾驶安全有何影响?
美国FDA再向恒瑞“开枪”背后,中国创新药企出海路在何方?
三峡工程开工建设30年来效益显著
十大鹅肝的吃法和做法分享 肥鹅肝怎么做好吃又简单
征服日檢N2:讀兩個月合格,我的學習歷程和方法
Windows 11【1001问】打开Windows 11任务管理器的11种方法
孕期必查项目一览:关键检查保母婴平安!
属鸡和属虎相配吉利吗(属鸡与属虎的配对是否吉利)
VR/AR/MR/XR 几种虚拟现实技术的区别
新车行驶证如何办理?这种办理流程对车辆合法上路有何影响?
汽车内饰清洗方法及流程详解
红细胞压积是什么意思?
怎么分辨怀孕和肚腩 小肚腩和怀孕的3个区别图
70-75岁老年人旅游时,各大景点门票究竟能否免费?出行必知!
Type-C接口引脚功能详解:为什么Type-C可以正反插?
让枯萎:网络时代情感价值的挑战与反思
西锐飞机业绩起飞 政治风险影响估值
中美企业家共话家族财富管理:传统智慧与社会责任的融合之道
小腿往外弯可以怎样改善
HDMI接口型号及年代说明概述:技术演进与应用解析
洗车机的选择标准是什么?怎样根据需求挑选合适的洗车机?
为什么有人能感觉死期?医生:人死前的一年,会出现这几种感觉
山花烂漫,喷嚏不断——过敏原血清IgE检测策略
蒸鲈鱼怎么做才不腥气?试试大厨的方法
宏观杠杆率三季度末升至298.1%:居民杠杆率连续两个季度下降