判断点是否在线段上

本文介绍了一种用于判断一个点是否位于特定线段上的算法。该算法通过两个条件实现:一是利用叉乘验证点是否在由两端点定义的直线上;二是检查点是否在以两端点为对顶点的矩形范围内,确保点不在线段的延长线上。适用于水平和垂直线段等特殊情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设有点Q以及p1p2,判断点Q在线段p1p2上包含两条依据:

1.(Q-p1)*(p2-p1)=0(叉乘)

2.Q在以p1,p2位对顶顶点的矩形内

前者保证了点Q在直线p1p2上,后者保证了点Q不在线段p1p2的延长线或者反向延长线上。

bool onsegment(point pi,point pj,point Q)
{
    if((Q.x-pi.x)*(pj.y-pi.y)==(pj.x-pi.x)*(Q.y-pi.y)&&min(pi.x,pj.x)<=Q.x&&Q.x<=max(pi.x,pj.x)&&min(pi.y,pj.y)<=Q.y&&Q.y<=max(pi.y,pj.y)){
        return true;
    }else{
        return false;
    }
}

 由于要考虑水平线段和垂直线段两种特殊情况,所以横纵坐标都得判断

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值