点到线段的距离 题解(C++)

博客详细介绍了如何计算点到线段的距离,从初步分析到第一代和第二代代码思路,探讨了不同情况下的解决方案,包括点在线段内外的判断和应用勾股定理的方法。

原题目:wzoi P573

初步分析

这道题之前有《点到直线的距离》一题。

如图,我们不妨来下个定义(名字是乱起的,如果有雷同就以以下定义为准):

对于任意线段l,在其两个端点上分别作垂直于l的直线,若点在两直线之间,则称点在“线段范围内”,否则在“线段范围外”。

这两条直线(蓝色的两条)称为“线段范围界线”。

上图中,点A在线段范围内,点B和点C都在线段范围外。

不难发现,当点在线段范围内,则点到线段的距离即点到线段所在直线的距离,套公式即可。

当点在线段范围外,则点到线段的距离即点到较近的一端点的距离。

于是第一代代码应运而生:

第一代代码思路

输入ABC三点坐标,计算出线段AB所在直线的表达式,利用二直线垂直,斜率相乘得-1,计算出两条界线的表达式。

判断C点是否处于两直线之间,给出相应的答案。

判断C点

作过C的铅垂线交两界线,纵坐标分别为y1,y2,y3,如图所示。

如果y1>y2>y3,则C在线段范围内,否则在线段范围外。

但是当时作图时只考虑到了如此的线段,未考虑水平、铅锤的情况,所以很可惜没做出来(其实是懒得讨论)

大家可以试着讨论一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值