当前位置: 首页 > news >正文

cpp算法编程中可能用到的几何知识

1.在几何计算中要注意精度问题 通常定义一个极小量用于判断相等

include

using namespace std;

// 1e-8 即 0.00000001,小于这个值可以认为等于0
const double eps = 1e-8;

int sgn(double x) {
if (fabs(x) < eps) return 0;
return x > 0 ? 1 : -1;
}
2.常用struct或者pair去定义/表示点或向量
struct Point{
double x,y;
};
3. 点积 :判断角度是钝角锐角还是直角
dot = a.xb.x + a.yb.y
dot > 0:夹角为锐角
dot < 0:夹角为钝角
dot = 0:垂直
4.叉积:求面积、判断点在线段哪侧
cross = a.xb.y - a.yb.x
cross > 0:a 旋转到 b 为逆时针(左侧)
cross < 0:a 旋转到 b 为顺时针(右侧)
cross = 0:共线(平行)
面积:两点构成的平行四边形面积(绝对值),三角形面积是它的一半
5. 两点间距离
公式:dist = sqrt( (x1-x2)(x1-x2) + (y1-y2)(y1-y2) )
函数:hypot(dx, dy) (cmath 库函数,精度更好)
6. 点到直线的距离
公式:|叉积| / 向量长度
//求p到直线ab的距离
double dist_point_to_line(Point p, Point a, Point b) {
// 向量ab
Point ab = b - a;
// 向量ap
Point ap = p - a;
// 叉积绝对值 / ab长度
return fabs(ab ^ ap) / dist(a, b);
}
7. 点到线段的距离(分情况讨论)
点到线段距离 ≠ 点到直线距离,需要判断垂足是否在线段内。
情况 1:垂足在线段上 → 用点到直线距离。
情况 2:垂足在线段外 → 取点到线段两端点距离的最小值。
8. 判断点在线段上
步骤:
叉积为 0
点积小于等于 0
bool on_segment(Point p, Point a, Point b) {
return sgn( (b-a) ^ (p-a) ) == 0
&& sgn( (p-a) * (p-b) ) <= 0; // 点积<=0 表示p在a,b之间
}
9. 判断两线段相交
核心:利用叉积判断方向。
规范相交(穿过):两点分别在直线两侧。
非规范相交(端点触碰):需要结合8中的on_segment判断。

http://www.jsqmd.com/news/636058/

相关文章:

  • 2026年青岛发电车租赁公司推荐榜:市南区/市北区/黄岛区/崂山区/李沧区/城阳区/即墨区/胶州市/平度市发电车租赁公司选择指南 - 海棠依旧大
  • 模型、Harness与记忆如何帮助Agent持续学习(Continual Learning)?
  • 高效稳定LDO芯片选型指南:从原理到实战应用
  • VutronMusic:你的跨平台音乐播放器终极解决方案
  • 2026年大模型从入门到精通:AI风口必学,高薪技能速成!错过等不起!
  • Java: File
  • 前端创新技术探索
  • LeetCode Hot100 - 4. 移动零(Java 题解)
  • 009、Python流程控制:条件判断(if/elif/else)
  • 函数用法记录——MATLAB符号计算
  • uniapp Uview框架中u-search组件实现动态搜索与数据过滤
  • Tiktokenizer高性能架构设计:深入解析Token可视化引擎的实现原理
  • WPF DataContext实战:三种绑定方式深度解析
  • 构建“私有第二大脑”:基于 Graph-RAG 的本地知识图谱 Agent 搭建指南
  • OpenClaw:AI Agent引擎驱动的企业全流程智能助手
  • “一眼识万物”:用Rokid AI Glasses与灵珠平台打造植物百科助手
  • AIAgent为何总“好心办坏事”?SITS2026首席科学家解密价值对齐的5个隐性断层及实时干预协议
  • mPDF终极指南:PHP PDF生成库的深度技术解析与实战应用
  • 【RJ 45连接器】RJ45 网络连接器 3D 模型 3 零件装配体 SolidWorks 源文件 含 STEP/IGS 通用格式
  • Python 函数完全指南:参数、返回值与高级用法
  • 告别模糊截图:html-to-image 终极高清图像生成指南
  • PCILeech DMA攻击工具深度实战指南:掌握无驱动内存取证核心技术
  • 网络攻防实践五 20252901程宇
  • 终极指南:使用icloudpd命令行工具轻松备份你的iCloud照片库
  • OpCore Simplify终极指南:三分钟完成黑苹果完美配置
  • 运维怎么转行网络安全?(非常详细)从零基础入门到精通,收藏这一篇就够了
  • Python GUI程序怎么避免卡顿_利用多线程实现后台异步处理
  • C++ string类
  • 360Controller:macOS平台Xbox游戏控制器驱动深度解析与实战指南
  • 如何通过Java程序监控Oracle表空间_JDBC定时执行巡检SQL并推送报警指标