C++ 怎么判断点在圆内 C++ 欧几里得距离计算公式实现【几何】

发布时间 - 2026-02-02 00:00:00    点击率:
最稳妥的方法是用平方比较而非sqrt:若(x - cx)² + (y - cy)² ≤ r²,则点在圆内(含边界),避免sqrt开销和浮点误差。

sqrt 和平方比较判断点在圆内最稳妥

直接算欧几里得距离再和半径比,看似直观,但 sqrt 开销大,还可能引入浮点误差。更推荐只比平方:若点 (x, y) 到圆心 (cx, cy) 的横纵坐标差的平方和 ≤ 半径 r 的平方,则点在圆内(含边界)。

实操建议:

  • 写成 (x - cx) * (x - cx) + (y - cy) * (y - cy) ,避免调用 sqrt
  • 所有变量用 doublefloat,别混用 int 和浮点——整数溢出或隐式转换会悄悄出错
  • 如果圆心或点坐标来自用户输入或传感器,先检查是否为 NaN 或无穷大,否则比较结果未定义

std::hypot 能防溢出但不必要用于圆内判断

std::hypot(x, y) 计算 sqrt(x² + y²) 时内部做了缩放,能避免中间结果溢出。但它本意是处理极端数量级的向量模长,对常规圆内判断属于“杀鸡用牛刀”。

使用场景有限:

  • 仅当你的坐标值可能达到 1e150 这种量级(远超典型图形/物理模拟范围)才需考虑
  • 它比直接平方和慢 3–5 倍,且仍要再和 r 比较,不如直接比平方
  • 若真要用,也得写成 std::hypot(x - cx, y - cy) ,别漏掉圆心偏移

整数坐标下用纯整数运算完全可行

如果圆心、点、半径全是整数,且你确定不会溢出(比如坐标范围在 ±10⁴ 内),可全程用 int 避免任何浮点问题。

注意点:

  • 半径平方用 long long 存,防止 int r = 50000r * r 溢出
  • 坐标差也先转成 long long 再平方:auto dx = (long long)(x - cx); dx * dx
  • 别写 (x - cx) * (x - cx) —— 两个 int 相乘仍按 int 算,溢出后截断再赋给 long long

    就晚了

边界情况:点在圆上、圆半径为 0、负半径

数学上圆半径非负,但代码里容易传入负值。C++ 不会自动报错,结果却不可靠。

建议防御性写法:

  • 函数开头加断言:assert(r >= 0) 或返回 false(若半径
  • 半径为 0 时,只有严格等于圆心的点才算“在圆内”,即 x == cx && y == cy
  • 而不是 包含圆上点;若业务要求“严格内部”,才改用

浮点比较本身有精度陷阱,但圆内判断用平方和避开了开方,已是实践中最轻量又鲁棒的做法。真正容易被忽略的是整数溢出路径和负半径输入——它们不会崩溃,但会让逻辑在静默中失效。


# c++  # 浮点  # 平方和  # 的是  # 欧几里得  # 开了  # 杀鸡  # 要用  # 已是  # 会让  # 也得 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在七牛云存储上搭建网站并设置自定义域名?  如何快速上传建站程序避免常见错误?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  如何基于云服务器快速搭建个人网站?  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  Laravel如何自定义错误页面(404, 500)?(代码示例)  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  如何在云虚拟主机上快速搭建个人网站?  微信小程序 wx.uploadFile无法上传解决办法  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Firefox Developer Edition开发者版本入口  如何解决hover在ie6中的兼容性问题  Laravel如何记录自定义日志?(Log频道配置)  微信小程序 HTTPS报错整理常见问题及解决方案  如何制作一个表白网站视频,关于勇敢表白的小标题?  微信小程序 scroll-view组件实现列表页实例代码  中山网站制作网页,中山新生登记系统登记流程?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  PHP正则匹配日期和时间(时间戳转换)的实例代码  Laravel怎么上传文件_Laravel图片上传及存储配置  php json中文编码为null的解决办法  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  如何在香港服务器上快速搭建免备案网站?  晋江文学城电脑版官网 晋江文学城网页版直接进入  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Python制作简易注册登录系统  b2c电商网站制作流程,b2c水平综合的电商平台?  Laravel如何处理和验证JSON类型的数据库字段  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  无锡营销型网站制作公司,无锡网选车牌流程?  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  浅述节点的创建及常见功能的实现  node.js报错:Cannot find module 'ejs'的解决办法  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  Python面向对象测试方法_mock解析【教程】  如何在IIS服务器上快速部署高效网站?  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  网站建设要注意的标准 促进网站用户好感度!  Laravel如何使用Blade模板引擎?(完整语法和示例)  Python企业级消息系统教程_KafkaRabbitMQ高并发应用