计算几何学习笔记
点、向量、直线、线段
点、向量
在结构体中储存横纵坐标即可。
向量的加、减、数乘
横纵坐标直接加、减、乘。
点积
-
定义:令
,二者夹角为 ,则有 (结果为标量)。 -
作用:求
夹角。点积为正,夹角锐角;点积为负,夹角钝角。
叉积
-
定义:令
, 逆时针旋转 到 ,则有 。 -
含义:标量,表示
形成的平行四边形有符号面积,其正负满足“右手定则”(即若 在 的顺时针方向,则 为正,逆时针则为负,这也可以通过将食指指向 、中指指向 大拇指的方向来判断)。 -
作用:
-
判断向量逆、顺、共线关系。
-
计算平行四边形、三角形面积。
-
向量旋转
设向量
直线、线段
直线一般使用“点 + 向量” / “点 + 点”储存表示。
线段储存两个端点。
点、直线、线段的关系
-
点与线位置关系
-
点与(有向)直线:用叉积判断逆时针、顺时针、在直线上。
-
点与线段:用叉积判断共线,用点积判断重合。
-
-
点与线距离
-
点与点
-
点与直线:直线上取两点,用叉积求和点形成的平行四边形面积,再除以底边长。
-
点与线段:用点积判断点的投影是否在线段上,再按照“点与直线”或“点与点”的方法计算。
-
-
点关于直线的变换
-
投影:设直线为
,点为 ,则用点积算出 在 上的投影向量,随即算出投影点。 -
对称:求出投影点以后作向量加减法即可。
-
-
线与线位置关系
-
直线与直线的位置关系:用叉积判平行,再用点线关系特判是否共线。
-
线段与线段的位置关系:先特判共线的情况;再用叉积检查两条线段是否都满足“另一条线段的两个端点在异侧”,成立则相交。
-
-
线与线交点
-
直线与直线的交点:
求直线
的交点 :容易解出
的坐标。这个方法实质对直线上任意位置关系的
都是成立的,但我不知道怎么证( -
线段与线段的交点:判断位置关系后转化为直线交点问题。
-
多边形、凸包
旋转卡壳
在一个凸包上,某些问题的最优解一定在“边对点”或“点对点”时产生。旋转卡壳的关键就在枚举这对“边点”或“点点”,我们所使用的工具即这对“平行线”——它们能帮助我们找到这些最远的“边点”和“点点”。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现