如何判定点D是否位于以B为圆心、A定朝向的已知半径180°扇形内
点是否在指定180°扇形内的判定方法

核心判定逻辑
目标区域是以B为圆心、固定半径、对称轴沿B指向A方向的180°半圆扇形,点D落在区域内需要同时满足两个条件:
- 点D到圆心B的直线距离不超过扇形半径
- 点D位于过B点、垂直于BA连线的分界直线靠A的一侧,即BD连线与BA连线的夹角不超过90°
整个计算过程只用到基础四则运算,不需要三角函数、开根号操作,计算效率高且不容易出现精度误差。
分步计算流程
所有点统一使用二维平面坐标(x, y)表示,按以下顺序计算即可:
- 确认已知量:A点坐标(Ax, Ay)、圆心B点坐标(Bx, By)、待判定D点坐标(Dx, Dy)、扇形半径r
- 计算B指向A的向量分量:
BAx = Ax - Bx,BAy = Ay - By - 计算B指向D的向量分量:
BDx = Dx - Bx,BDy = Dy - By - 距离校验:计算B到D的距离平方
BD_sq = BDx*BDx + BDy*BDy,计算半径平方r_sq = r*r。如果BD_sq > r_sq,说明D在圆形范围外,直接判定不通过。用平方做比较可以省去开根号步骤,减少计算量和精度损失。 - 方位校验:计算两个向量的点积
dot = BAx*BDx + BAy*BDy。如果dot < 0,说明D在半圆背向A的一侧,判定不通过。 - 两项校验全部通过时,即可判定D落在目标扇形区域内。
边界规则说明:如果需求是排除区域边界(即点落在圆弧、直边上不算在区域内),将上述判断条件中的
>、<替换为>=、<=即可。
伪代码实现
// 入参定义: // A: 确定扇形朝向的点,包含x、y两个坐标属性 // B: 扇形圆心点,包含x、y两个坐标属性 // D: 待判定点,包含x、y两个坐标属性 // r: 扇形已知半径 function isDInSector(A, B, D, r): // 计算向量分量 baX = A.x - B.x baY = A.y - B.y bdX = D.x - B.x bdY = D.y - B.y // 校验距离是否在半径范围内 distSquare = bdX * bdX + bdY * bdY rSquare = r * r if distSquare > rSquare: return False // 校验是否在朝向A的半圆侧 dotProduct = baX * bdX + baY * bdY if dotProduct < 0: return False return True
内容的提问来源于stack exchange,提问作者Dromd
相关产品推荐
相关产品推荐

