0

0

C++ 怎么判断点在圆内 C++ 坐标距离计算逻辑代码【几何】

尼克

尼克

发布时间:2026-01-25 12:50:03

|

585人浏览过

|

来源于php中文网

原创

不推荐用 sqrt 计算欧氏距离再比较,应比较平方距离与半径平方;函数需处理边界(如是否含圆上)、负半径等,推荐用 double 类型。

c++ 怎么判断点在圆内 c++ 坐标距离计算逻辑代码【几何】

sqrt 计算距离再比较?不推荐

直接算欧氏距离再和半径比较,看似直观,但涉及 sqrt 开方运算,性能低且引入浮点误差。尤其在高频判断(如碰撞检测、点云筛选)中,能避免就避免。

  • 正确做法是**比较平方距离与半径的平方**,完全避开开方
  • sqrtcmath 中,但这里根本不需要调用它
  • 注意:所有坐标和半径必须是同类型(推荐 double,避免 float 精度不足)

point_in_circle 函数怎么写才安全

核心逻辑只三行:算 Δx² + Δy²,再和 r² 比较。但边界情况必须明确——“点在圆上”算不算“在圆内”?这取决于业务需求,函数接口要显式体现。

  • 若包含边界:用 distance_sq
  • 若严格内部:用 distance_sq
  • 务必检查 radius >= 0,负半径无几何意义,可断言或提前返回 false
  • 示例:
    bool point_in_circle(double px, double py, double cx, double cy, double r) {
        if (r < 0) return false;
        double dx = px - cx, dy = py - cy;
        return dx * dx + dy * dy <= r * r;
    }

整数坐标下要不要转 double

如果点和圆心坐标都是 int,而半径是 intlong long,直接用整数运算更安全——没有浮点舍入风险,且更快。

  • 只要 dx * dx + dy * dy 不溢出,就优先用整数计算
  • 例如:坐标范围在 ±10⁴ 内,dx² 最大 10⁸,int 可能溢出(INT_MAX ≈ 2×10⁹),建议用 long long 存放平方和
  • 对应签名可为:bool point_in_circle(int px, int py, int cx, int cy, int r),内部用 long long 算平方和

三维点判断球内?逻辑一样,只是多一项

从二维到三维,唯一变化是加一个 dz * dz。公式本质没变:点到球心的平方距离 ≤ 半径平方。

Gaga
Gaga

曹越团队开发的AI视频生成工具

下载

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

  • 别重复造轮子,把二维函数稍作扩展即可
  • 三维版只需增加 double dz = pz - cz,然后判断 dx*dx + dy*dy + dz*dz
  • 注意:三维场景下更需警惕数值范围——double 虽精度高,但极大坐标值相减后平方仍可能损失有效位

实际用的时候,最易忽略的是半径非负校验和整数溢出,尤其是批量处理图像像素坐标或地图经纬度投影点时,这两处一错,结果就全偏了。

相关专题

更多
css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

574

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

101

2025.10.23

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

574

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

101

2025.10.23

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

381

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

543

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

53

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

45

2026.01.23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 7.5万人学习

C 教程
C 教程

共75课时 | 4.2万人学习

C++教程
C++教程

共115课时 | 13.7万人学习

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

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