0

0

C++ 怎么判断点在矩形内 C++几何坐标范围判断逻辑【练习】

冰火之心

冰火之心

发布时间:2026-02-01 11:50:03

|

533人浏览过

|

来源于php中文网

原创

判断点(x,y)是否在轴对齐矩形内,只需检查x∈[x_min,x_max]且y∈[y_min,y_max];边界处理需统一采用闭区间或半开区间,避免混用导致逻辑错误。

c++ 怎么判断点在矩形内 c++几何坐标范围判断逻辑【练习】

std::pair 或结构体表示点,直接比较坐标边界

矩形若为轴对齐(边平行于坐标轴),判断点 (x, y) 是否在其中,本质是两个一维区间判断:x 是否在矩形 x 范围内,且 y 是否在矩形 y 范围内。无需调用任何几何库,纯逻辑运算即可。

常见错误是边界处理不一致——比如误用 而非 ,导致点恰好落在右/下边上被判定为“外部”。实际应根据需求明确是否包含边界(通常数学上“在矩形内”含闭区间)。

  • 若矩形由左上角 (x1, y1) 和右下角 (x2, y2) 定义(且保证 x1 、y1 ),则条件为:x >= x1 && x = y1 && y
  • 若矩形由中心 (cx, cy)、半宽 hw、半高 hh 给出,等价转换为:x >= cx - hw && x = cy - hh && y
  • 注意:C++ 中浮点数比较需谨慎,若坐标为 floatdouble,建议引入小量 eps 避免精度误差,例如 x + eps >= x1

封装成函数时,优先用 const 引用传参避免拷贝

点和矩形数据若为自定义结构(如 struct Point { double x, y; };),函数签名应避免值传递开销,尤其在高频调用或批量判断场景中。

示例函数:

立即学习C++免费学习笔记(深入)”;

struct Rect {
    double x1, y1, x2, y2; // 左上、右下(已归一化)
};
bool pointInRect(const Point& p, const Rect& r) {
    return p.x >= r.x1 && p.x <= r.x2 && p.y >= r.y1 && p.y <= r.y2;
}

若矩形未保证 x1 ,应在构造或传入前归一化(交换值),否则逻辑失效。这点容易被忽略,尤其从图像 API(如 OpenCV 的 cv::Rect)取坐标时,y 正方向可能向下,但只要 y1y2 是上下边界数值,比较本身不受影响。

处理 OpenCV 的 cv::Rect 时注意 y 轴方向与数学习惯一致

OpenCV 的 cv::Rect(x, y, width, height) 表示,其中 y 是顶边纵坐标,向下递增。这和常规数学坐标系 y 向上不同,但**不影响点在矩形内的判断逻辑**——因为仍是轴对齐,只需把矩形映射为 [x, x+width) × [y, y+height) 区间。

Outwrite
Outwrite

AI写作浏览器插件,将您的想法变成有力的句子

下载
  • 默认 OpenCV 使用左闭右开区间(contains() 方法也如此),即点 (x+width, y) 不在内;若需闭区间,改用 并把右下角设为 y + height - 1(整数坐标)
  • 直接调用 OpenCV 自带方法更稳妥:cv::Rect r(10, 20, 100, 50); bool in = r.contains(cv::Point(50, 30));
  • 但注意 cv::Rect::contains() 对浮点 cv::Point2f 仍按整数截断处理,有精度丢失风险

非轴对齐矩形?别硬写,用向量叉积或变换坐标系

如果矩形旋转了,上面的坐标比较完全失效。此时不能再只看 x/y 值,必须转到矩形局部坐标系,或用向量投影法。

最简方案是坐标变换:将点平移并旋转,使矩形回到轴对齐状态,再套用前述逻辑。关键步骤是获取矩形的单位 x/y 轴向量(由顶点算出),然后做点积投影。

更通用但稍重的方式是射线法或绕数法,但对凸四边形(如矩形)更高效的是:检查点是否在四条边的“内侧”——每条边对应一个向量叉积符号一致(如都 ≥ 0)。例如边 AB,计算 cross(AB, AP),符号决定 P 在 AB 左/右侧。

真正写的时候,别手撸全部向量运算;若项目已用 Eigen 或 GLM,直接用 transformPointdot/cross 函数。自己实现务必测试退化情况(如矩形扁平、点重合顶点)。

轴对齐是特例,也是绝大多数练习和 UI 场景的默认假设;一旦涉及旋转,问题性质就从“范围判断”升级为“计算几何”,边界条件和数值稳定性立刻变复杂。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

262

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

192

2025.07.04

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

72

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

72

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号