计算几何之 点到直线的距离&点到线段的距离 代码模板与证明
创作时间:
作者:
@小白创作中心
计算几何之 点到直线的距离&点到线段的距离 代码模板与证明
引用
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的长度,否则,分如下三种情况:
热门推荐
龙舌兰酒的多种饮用方式与搭配,尽享独特饮酒乐趣
伺服电缸的速度和行程调节方法详解
胃息肉需要做手术切掉吗
孕妇腹泻怎么办?专家解析五大原因及处理方法
什么是车身高度调节?详解这项汽车悬挂系统技术
游戏手柄怎么连接电脑
三月三 荠菜煮鸡蛋:一道传承千年的春日美食
属羊和属马的配对:传统文化视角下的性格解读与相处之道
建议!脂肪肝患者这样饮食加运动可逆转病情!
4月国外旅游推荐
口腔溃疡两个月了还没好是什么情况
资本运营模式是什么?从法律角度解析企业资本运作方式
《星陨计划》佣兵团战GVG机制详解
春节期间,广东深化“讲心不讲金”移风易俗获广泛响应
六大热词:从广东读懂2024年中国经济
8万元左右新能源电动汽车选购指南:多款车型对比分析
为什么IP地址一般是192.168开头
心理咨询伦理:守护心灵的灯塔
心肌缺血是怎么回事?
引起功能性腹胀的原因是什么
硫酸亚铁给植物灌根的正确使用方法
探秘千古一帝:秦始皇的未解之谜与野史逸闻
樱桃血管瘤:成因、治疗与预后全解析
HDMI 2.0是否支持2K 144Hz分辨率?一文详解其技术特性与优势
沉香的种植条件与适宜地区(探究沉香生长的要素,找到适合种植的环境)
深色T恤数码直喷印花工艺解析(含白墨直喷)
战胜银屑病:从治疗方案到预防措施
团队聚餐座位安排的讲究
如何分析员工离职的根本原因?
石材压顶石的种类与特点,为你解析高品质建筑材料