牛客计算几何班笔记

第一章 导论

概况

题目类型

包含三种:

  • 判定 判断是否,比如是否有交点
  • 计数 求交点,面积等
  • 列举 圆与直线交点坐标

工具

https://csacademy.com/app/geometry_widget/

https://www.geogebra.org/calculator

前置知识(浮点数与精度问题

C++中包含三种浮点数,但一般只使用以下两种

  • double 64bit
  • long double 不同编译器的位数可能是96bit,也可能是128bit

关于特殊值

  • +0.0 -0.0
    0也会带有符号位,需要注意部分题目无spj而误判的问题
  • INFINITF 无穷
    1.0/0.0==INFINITF1.0/−1.0==−INFINITF1.0/0.0 == INFINITF~~~~~~~1.0/-1.0 == -INFINITF1.0/0.0==INFINITF       1.0/−1.0==−INFINITF
    该特殊值同样带有符号
  • NAN 非数
    注意事项
  • 若可以在整数域内解决的题不要用浮点数,某事情况可以使用分数
    何老师:“感觉全是double的模板可以直接扬了 ”
  • 不用float,有时题目会卡double,视情况使用long double
  • 减少使用数学函数
  • eps
    (fabs(a−b)<eps)==(a==b)(fabs(a-b)<eps) == (a==b)(fabs(a−b)<eps)==(a==b)

模板

模板库

第二章 二维基础(点和线)

struct Point{double x,y;};
//x:横坐标     y:纵坐标
//重载运算符

向量

由于向量是零点指向目标点的方向,可直接用点表示

using Point=point<double>;

点积

a→⋅b→=axbx+ayby\overrightarrow{a}\cdot\overrightarrow{b}=a_xb_x+a_yb_ya⋅b=ax​bx​+ay​by​

几何意义:

a→⋅b→=∣∣a⃗∣∣∣∣b⃗∣∣cos⁡θ\overrightarrow{a}\cdot\overrightarrow{b}=\vert\vert\vec a\vert\vert\vert\vert\vec b\vert\vert\cos\thetaa⋅b=∣∣a∣∣∣∣b∣∣cosθ


长度:∣∣a⃗∣∣=a→⋅a→\vert\vert\vec a\vert\vert=\sqrt{\overrightarrow{a}\cdot\overrightarrow{a}}∣∣a∣∣=a⋅a​

夹角:cos⁡θ=a→⋅b→∣∣a⃗∣∣∣∣b⃗∣∣\cos\theta=\frac{\overrightarrow{a}\cdot\overrightarrow{b}}{\vert\vert\vec a\vert\vert\vert\vert\vec b\vert\vert}cosθ=∣∣a∣∣∣∣b∣∣a⋅b​

投影:∣∣BD⃗∣∣=∣∣a⃗∣∣cos⁡θ=a→⋅b→∣∣b⃗∣∣\vert\vert\vec {BD}\vert\vert=\vert\vert\vec a\vert\vert\cos\theta=\frac{\overrightarrow{a}\cdot\overrightarrow{b}}{\vert\vert\vec b\vert\vert}∣∣BD∣∣=∣∣a∣∣cosθ=∣∣b∣∣a⋅b​

垂直:a⃗⋅b⃗=0\vec a\cdot\vec b=0a⋅b=0

叉积

a⃗×b⃗=(axby−aybx)v⃗\vec a\times\vec b=(a_xb_y-a_yb_x)\vec va×b=(ax​by​−ay​bx​)v

几何意义:

a⃗×b⃗=∣∣a⃗∣∣∣∣b⃗∣∣sin⁡θv⃗\vec a\times\vec b=||\vec a||~||\vec b||\sin \theta \vec va×b=∣∣a∣∣ ∣∣b∣∣sinθv

平行四边形面积:∣∣a⃗∣∣∣∣b⃗∣∣∣sin⁡θ∣=∣∣a⃗×b⃗∣∣||\vec a||~||\vec b||~|\sin \theta|=||\vec a\times\vec b||∣∣a∣∣ ∣∣b∣∣ ∣sinθ∣=∣∣a×b∣∣

平行:a⃗×b⃗=0⃗\vec a\times\vec b=\vec 0a×b=0

toleft测试(用于判断点P在线段AB的哪一侧)

AB⃗×AP⃗>0P在左侧\vec {AB}\times\vec {AP} > 0~~~~~~~~~~~~P在左侧AB×AP>0            P在左侧
AB⃗×AP⃗<0P在右侧\vec {AB}\times\vec {AP} < 0~~~~~~~~~~~~P在右侧AB×AP<0            P在右侧
AB⃗×AP⃗=0P在AB上\vec {AB}\times\vec {AP} = 0~~~~~~~~~~~~P在AB上AB×AP=0            P在AB上

线段

struct Segment{Point a,b;};

直线

采用点向式

struct Line{Point p,v;};
// p为直线上点,v为向量即直线的方向

基本问题

  1. 向量a⃗\vec aa逆时针旋转θ\thetaθ
    通过向量变换实现
    [cos⁡θ−sin⁡θsin⁡θcos⁡θ][axay]=[cos⁡θax−sin⁡θaysin⁡θax+cosθay]\begin{bmatrix} \cos\theta&-\sin\theta\\ \sin\theta&\cos\theta\\ \end{bmatrix} \begin{bmatrix} a_x\\ a_y\\ \end{bmatrix}= \begin{bmatrix} \cos\theta a_x-\sin\theta a_y\\ \sin\theta a_x+cos\theta a_y\\ \end{bmatrix} [cosθsinθ​−sinθcosθ​][ax​ay​​]=[cosθax​−sinθay​sinθax​+cosθay​​]

  2. 点和线段的关系(含端点)

    点与线段之间存在3种关系,在线段上,在线段的延长线上,在线段外

  • 判断点是否在线段上 PA⃗×PB⃗=0⃗\vec {PA}\times\vec {PB}=\vec 0PA×PB=0
  • 判断点是否在ABABAB之间 PA⃗⋅PB⃗≤0\vec {PA}\cdot\vec {PB}\leq 0PA⋅PB≤0
  • 否则点在线段外
  1. 线段和线段的关系

    对于线段ABABAB和线段CDCDCD

  • 特判三点共线

  • 特判四点共线

  • 当 ABCDABCDABCD不共线,跨立实验
    通过toleft判断
    A,BA,BA,B在直线CDCDCD的不同侧
    C,DC,DC,D在直线ABABAB的不同侧
    当满足两个条件,即为相交

  1. 点到直线的距离

    通过已知条件可以求出以PA⃗\vec {PA}PA和v⃗\vec vv为边的平行四边形面积,而ABABAB为该平行四边形的高,因此可以得到ABABAB的长度。

    ∣∣AB⃗∣∣=∣∣PA⃗×v⃗∣∣∣∣v⃗∣∣||\vec {AB}||=\frac{||\vec {PA}\times\vec v||}{||\vec v||}∣∣AB∣∣=∣∣v∣∣∣∣PA×v∣∣​

  2. 点在直线上的投影点

    通过求OB⃗\vec {OB}OB可得BBB的坐标。

    OB⃗=OP⃗+PB⃗\vec {OB}=\vec {OP}+\vec {PB}OB=OP+PB

    ∣∣PB⃗∣∣=∣∣PA⃗∣∣cos⁡θ=PA⃗⋅v⃗∣∣v⃗∣∣||\vec {PB}||=||\vec {PA}||\cos \theta=\frac{\vec {PA}\cdot\vec v}{||\vec v||}∣∣PB∣∣=∣∣PA∣∣cosθ=∣∣v∣∣PA⋅v​

    PB⃗=∣∣PB⃗∣∣∣∣v⃗∣∣v⃗=PA⃗⋅v⃗v⃗2v⃗\vec {PB}=\frac{||\vec {PB}||}{||\vec v||}\vec v=\frac{\vec {PA}\cdot\vec v}{{\vec v}^2}\vec vPB=∣∣v∣∣∣∣PB∣∣​v=v2PA⋅v​v

  3. 直线与直线的交点
    偷懒,不想敲公式了QAQ

计算几何从入门到入土(一)相关推荐

  1. 计算几何从入门到入土(题目)

    代码中的板子参考了繁凡和俊杰带佬的板子 二维基础 A.计算几何spj hacker 题意: 输入一组数a,b使无论ans为任何数,以下函数都返回AC. // a and b are outputed ...

  2. rocketmq怎么保证消息一致性_从入门到入土(三)RocketMQ 怎么保证的消息不丢失?...

    精彩推荐 一百期Java面试题汇总SpringBoot内容聚合IntelliJ IDEA内容聚合Mybatis内容聚合 接上一篇:RocketMQ入门到入土(二)事务消息&顺序消息 面试官常常 ...

  3. Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)

    文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig 欢迎 star !!! 本来想着闲来无事,前面在项目中刚刚用到了工作流 Activit ...

  4. activiti api文档_【白银人机】Activiti 工作流从入门到入土:完整 hello world 大比拼(API 结合实例讲解)...

    点击上方"好好学java",选择"置顶"公众号 重磅资源.干货,第一时间送达 重磅推荐  ① 纯福利 | 公众号资源大汇总,一年才一次! ② 重磅!!2018年 ...

  5. 从入门到入土(十)RocketMQ集群流程以及核心概念

    精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Mybatis内容聚合 接上一篇:从入门到入土(九)手摸手教你搭建RocketMQ双主双从同步集群 ...

  6. 从入门到入土(九)手摸手教你搭建RocketMQ双主双从同步集群,不信学不会!...

    精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Mybatis内容聚合 接上一篇:从入门到入土(八)RocketMQ的Consumer是如何做的负 ...

  7. 从入门到入土(八)RocketMQ的Consumer是如何做的负载均衡的

    精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Mybatis内容聚合 接上一篇:RocketMQ入门到入土(七 )为什么同一个消费组设置不同ta ...

  8. RocketMQ入门到入土(七 )为什么同一个消费组设置不同tag会出现奇怪现象

    精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Mybatis内容聚合 接上一篇:RocketMQ入门到入土(六)发消息的时候选择queue的算法 ...

  9. RocketMQ入门到入土(六)发消息的时候选择queue的算法有哪些?

    精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Mybatis内容聚合 接上一篇:RocketMQ入门到入土(五)消息持久化存储源码解析 一.说明 ...

最新文章

  1. 哈工大、清华、CSDN、嵌入式视觉联盟合办的 AIoT 盛会,你怎么舍得错过?!
  2. STL之Deque的使用方法
  3. 从零入门 Serverless | Serverless 应用如何管理日志 持久化数据
  4. angular moment 倒计时_Moment 推出多款适用苹果 iPhone 12 的 MagSafe 配件:包括快速安装外接镜头保护壳 - iPhone 12...
  5. 19、Power Query-快速分析各产品的销售情况
  6. opencv4.4.0函数手册_【文档更新】发布100ask_imx6ull用户手册V2.0和全新烧写工具
  7. apache-tomcat集成,转帖
  8. jsp 与html 如何结合使用方法,jsp中如何写javascript?
  9. 搜索控制器UISearchController的使用
  10. python discover()没有加载测试用例_Python系统学习 - Unittest
  11. 网络中的网络 NiN 动手学深度学习v2 pytorch
  12. dematel法分析系统中各要素的重要程度
  13. mac本常用快捷键大全
  14. 【技术】UEFI基础服务:系统表
  15. Scala下Play框架学习笔记(Actions,Controllers and Results)
  16. vue项目发版,缓存问题。
  17. [Pico]读取新建写入文本文件
  18. 为什么你需要辞职了?——辞职的十大理由
  19. poi读取Excel时日期为数字 的解决方法
  20. 计算机网络安全属性不包括哪些,计算机安全的属性不包括什么

热门文章

  1. Android 跳转到另一个应用
  2. 为什么企业都在建立指标体系,有什么用途?
  3. 前端开发基础(HTML基础)
  4. 基于微信小程序视频点播系统、电影播放系统、在线教育视频系统 系统的设计与实现 开题报告和效果图
  5. macOS10.14虚拟机无法登录Apple ID终极解决方法
  6. 在磨金石教育学室内设计靠谱吗?学费贵吗?老师负责吗?
  7. 你听说过哪些坑人 or 赚钱的歪点子?真是骗局太多,傻子都不够用啊!
  8. 如何使用 ffmpeg替代方式将webm转换为常用mp3格式
  9. 服务器调用打印机进行文档打印,云服务器怎么调用本地打印机
  10. 一分钟让你了解什么是ELP