计算几何学习笔记

点、向量、直线、线段

点、向量

在结构体中储存横纵坐标即可。

向量的加、减、数乘

横纵坐标直接加、减、乘。

点积

  • 定义:令 A=(x1,y1),B=(x2,y2),二者夹角θ,则有 AB=|A||B|cosθ=x1x2+y1y2(结果为标量)。

  • 作用:求 A,B 夹角。点积为正,夹角锐角;点积为负,夹角钝角。

叉积

  • 定义:令 A=(x1,y1),B=(x2,y2)A 逆时针旋转 θB,则有 A×B=|A||B|sinθ=x1y2x2y1

  • 含义:标量,表示 A,B 形成的平行四边形有符号面积,其正负满足“右手定则”(即若 AB 的顺时针方向,则 A×B 为正,逆时针则为负,这也可以通过将食指指向 A、中指指向 B 大拇指的方向来判断)。

  • 作用:

    • 判断向量逆、顺、共线关系。

    • 计算平行四边形、三角形面积。

向量旋转

设向量 (x,y) 逆时针旋转 θ 得到 (x,y),有:

x=xcosθysinθ

y=xsinθ+xcosθ

直线、线段

直线一般使用“点 + 向量” / “点 + 点”储存表示。

线段储存两个端点。

点、直线、线段的关系

  • 点与线位置关系

    • 点与(有向)直线:用叉积判断逆时针、顺时针、在直线上。

    • 点与线段:用叉积判断共线,用点积判断重合。

  • 点与线距离

    • 点与点

    • 点与直线:直线上取两点,用叉积求和点形成的平行四边形面积,再除以底边长。

    • 点与线段:用点积判断点的投影是否在线段上,再按照“点与直线”或“点与点”的方法计算。

  • 点关于直线的变换

    • 投影:设直线为 (p1,p2),点为 p,则用点积算出 p1pp1p2 上的投影向量,随即算出投影点。

    • 对称:求出投影点以后作向量加减法即可。

  • 线与线位置关系

    • 直线与直线的位置关系:用叉积判平行,再用点线关系特判是否共线。

    • 线段与线段的位置关系:先特判共线的情况;再用叉积检查两条线段是否都满足“另一条线段的两个端点在异侧”,成立则相交。

  • 线与线交点

    • 直线与直线的交点:

      求直线 AB,CD 的交点 E

      image

      xDxExExC=yDyEyEyC=|DE|EC=SΔABDSΔABC=AD×ABAB×AC

      容易解出 E 的坐标。

      这个方法实质对直线上任意位置关系的 A,B,C,D 都是成立的,但我不知道怎么证(

    • 线段与线段的交点:判断位置关系后转化为直线交点问题。


多边形、凸包

旋转卡壳

在一个凸包上,某些问题的最优解一定在“边对点”或“点对点”时产生。旋转卡壳的关键就在枚举这对“边点”或“点点”,我们所使用的工具即这对“平行线”——它们能帮助我们找到这些最远的“边点”和“点点”。

posted @   David_Mercury  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示