计算几何从入门到入土(一)
牛客计算几何班笔记
第一章 导论
概况
题目类型
包含三种:
- 判定 判断是否,比如是否有交点
- 计数 求交点,面积等
- 列举 圆与直线交点坐标
工具
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=axbx+ayby
几何意义:
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=(axby−aybx)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为向量即直线的方向
基本问题
向量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θ][axay]=[cosθax−sinθaysinθax+cosθay]点和线段的关系(含端点)
点与线段之间存在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
- 否则点在线段外
线段和线段的关系
对于线段ABABAB和线段CDCDCD
特判三点共线
特判四点共线
当 ABCDABCDABCD不共线,跨立实验
通过toleft判断
A,BA,BA,B在直线CDCDCD的不同侧
C,DC,DC,D在直线ABABAB的不同侧
当满足两个条件,即为相交
点到直线的距离
通过已知条件可以求出以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∣∣
点在直线上的投影点
通过求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⋅vv
直线与直线的交点
偷懒,不想敲公式了QAQ
计算几何从入门到入土(一)相关推荐
- 计算几何从入门到入土(题目)
代码中的板子参考了繁凡和俊杰带佬的板子 二维基础 A.计算几何spj hacker 题意: 输入一组数a,b使无论ans为任何数,以下函数都返回AC. // a and b are outputed ...
- rocketmq怎么保证消息一致性_从入门到入土(三)RocketMQ 怎么保证的消息不丢失?...
精彩推荐 一百期Java面试题汇总SpringBoot内容聚合IntelliJ IDEA内容聚合Mybatis内容聚合 接上一篇:RocketMQ入门到入土(二)事务消息&顺序消息 面试官常常 ...
- Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)
文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig 欢迎 star !!! 本来想着闲来无事,前面在项目中刚刚用到了工作流 Activit ...
- activiti api文档_【白银人机】Activiti 工作流从入门到入土:完整 hello world 大比拼(API 结合实例讲解)...
点击上方"好好学java",选择"置顶"公众号 重磅资源.干货,第一时间送达 重磅推荐 ① 纯福利 | 公众号资源大汇总,一年才一次! ② 重磅!!2018年 ...
- 从入门到入土(十)RocketMQ集群流程以及核心概念
精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Mybatis内容聚合 接上一篇:从入门到入土(九)手摸手教你搭建RocketMQ双主双从同步集群 ...
- 从入门到入土(九)手摸手教你搭建RocketMQ双主双从同步集群,不信学不会!...
精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Mybatis内容聚合 接上一篇:从入门到入土(八)RocketMQ的Consumer是如何做的负 ...
- 从入门到入土(八)RocketMQ的Consumer是如何做的负载均衡的
精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Mybatis内容聚合 接上一篇:RocketMQ入门到入土(七 )为什么同一个消费组设置不同ta ...
- RocketMQ入门到入土(七 )为什么同一个消费组设置不同tag会出现奇怪现象
精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Mybatis内容聚合 接上一篇:RocketMQ入门到入土(六)发消息的时候选择queue的算法 ...
- RocketMQ入门到入土(六)发消息的时候选择queue的算法有哪些?
精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Mybatis内容聚合 接上一篇:RocketMQ入门到入土(五)消息持久化存储源码解析 一.说明 ...
最新文章
- 哈工大、清华、CSDN、嵌入式视觉联盟合办的 AIoT 盛会,你怎么舍得错过?!
- STL之Deque的使用方法
- 从零入门 Serverless | Serverless 应用如何管理日志 持久化数据
- angular moment 倒计时_Moment 推出多款适用苹果 iPhone 12 的 MagSafe 配件:包括快速安装外接镜头保护壳 - iPhone 12...
- 19、Power Query-快速分析各产品的销售情况
- opencv4.4.0函数手册_【文档更新】发布100ask_imx6ull用户手册V2.0和全新烧写工具
- apache-tomcat集成,转帖
- jsp 与html 如何结合使用方法,jsp中如何写javascript?
- 搜索控制器UISearchController的使用
- python discover()没有加载测试用例_Python系统学习 - Unittest
- 网络中的网络 NiN 动手学深度学习v2 pytorch
- dematel法分析系统中各要素的重要程度
- mac本常用快捷键大全
- 【技术】UEFI基础服务:系统表
- Scala下Play框架学习笔记(Actions,Controllers and Results)
- vue项目发版,缓存问题。
- [Pico]读取新建写入文本文件
- 为什么你需要辞职了?——辞职的十大理由
- poi读取Excel时日期为数字 的解决方法
- 计算机网络安全属性不包括哪些,计算机安全的属性不包括什么