计算几何之 点到直线的距离&点到线段的距离 代码模板与证明
创作时间:
作者:
@小白创作中心
计算几何之 点到直线的距离&点到线段的距离 代码模板与证明
引用
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的长度,否则,分如下三种情况:
热门推荐
红楼梦:搞懂“忠顺亲王”的身份,才知道,贾府抄家只是迟早的事
自媒体与电商平台的合作与融合
“龙渊” “太阿” “工布”三把绝世名剑重现“江湖”?一起来看看~
“创业失败后,我从富二代变负二代”
混合动力系统架构详解:模式切换与SOC控制策略
如何合理规划家庭财务?这些规划如何应对突发经济变化?
澳洲公司注册全攻略:从流程到优势,助你轻松入驻澳洲市场
第17期汽车零整比研究结果发布:零整比100指数368.01%,环比小幅上涨
汽车保养的收费标准是怎样的?这种收费标准受哪些因素影响?
天使轮、风投、私募、A轮、B轮、C轮、D轮融资到底是什么
Nature:两个基因对的突变或有望为5%的成人癌症提供有希望的潜在药物靶点
喂奶期间能吃蒙脱石散吗 蒙脱石散哺乳期服用禁忌
文化中国行|无锡惠山古镇:雅与潮,“露天历史博物馆”焕发新光彩
《人人都恨克里斯》:一部以幽默化解困境的成长喜剧
古文运动:韩愈与柳宗元的文学革新之路
买房如何判断户型布局是否合理
如何让低空经济行业生态发展
核心价值观入案例 德法交融共筑和谐
北航VS哈工大,录取分数线接近,学生该如何选择?
汽车旋压车轮轮辐制造工艺详解及发展趋势
探问房地产不良资产处置:AMC的纾困思路
西吡氯铵含片
种两颗门牙需要多少钱?影响因素及价格详解
探问房地产不良资产处置:AMC的纾困思路
Excel会计实用计算操作技巧汇总
户籍是什么意思
河北工业大学在相变储热材料研发取得突破性进展
Cell最新研究:中美团队合作揭示癌症治疗新靶点
汽车冲压件制造技术:旋压车轮轮辐冲压工艺及发展
在集装箱里,种出垂直农业的未来