计算几何学习小记

文章目录

    • 前言
  • 正题
    • 平面运算
        • 加减
        • 乘积
      • 常见问题
        • 直线/线段规范交点
        • 求垂线/点问题
        • 判断点在多边形的内/外
        • 求两个圆的交点

前言

因为懒得画图理解计算几何所以要来这里鼓励一下自己
以后新学的应该也会写在这里。就当我是水博客
应该都是二维的计算几何,三维的有生之年再学
公式用的不规范,感性理解的


正题


平面运算

定义两个向量a⃗=(xa,ya),b⃗=(xb,yb)\vec{a}=(x_a,y_a),\vec{b}=(x_b,y_b)a=(xa,ya),b=(xb,yb)
下方为了方便不一定会加→\rightarrow

加减

向量加法遵循平行四边形定则,a⃗+b⃗=c⃗\vec a+\vec b=\vec ca+b=c
满足xc=xa+xb,yc=ya+ybx_c=x_a+x_b,y_c=y_a+y_bxc=xa+xb,yc=ya+yb
向量减法遵循三角形定则,a⃗−b⃗=c⃗\vec a-\vec b=\vec cab=c
满足xc=xa−xb,yc=ya−ybx_c=x_a-x_b,y_c=y_a-y_bxc=xaxb,yc=yayb
图里a−b⃗\vec{a-b}ab的方向反了/kk
在这里插入图片描述

乘积

定义∣a∣|a|a表示aaa的模长,表示向量aaa的无向长度,而aaa的模定义为有向长度
定义a∗ba*bab表示aaabbb点积,是bbb投影到aaa上的向量模乘上向量aaa的模。实数a∗b=xaxb+yayba*b=x_ax_b+y_ay_bab=xaxb+yayb
在这里插入图片描述

(为了清楚我将红色线下移了一格),点积就是红色的长度乘上蓝色的长度

一般的时候点积用于判断两条直线的正反,如果两条直线方向相同则点积为正否则为负。

定义a×ba\times ba×b表示aaabbb叉积,是向量a,ba,ba,b围成的平行四边形的有向面积。实数a×b=xayb−xbyaa\times b=x_ay_b-x_by_aa×b=xaybxbya
在这里插入图片描述
如图所示的平行四边形的有向面积就是a×ba\times ba×b
一般用于求多边形的面积或者判断一条直线在另一条直线的左侧还是右侧。

常见问题

直线/线段规范交点

询问两条直线a:(sa,ta)a:(s_a,t_a)a:(sa,ta)b:(sb,tb)b:(s_b,t_b)b:(sb,tb)交点时(我们用向量形式表示点坐标,再以直线上两个点表示直线)。
考虑使用面积法
在这里插入图片描述

如图,我们使用叉积计算由直线aaa分开的两个三角形的面积S1,S2S1,S2S1,S2
那么SO:OT=S1:S2SO:OT=S1:S2SO:OT=S1:S2然后我们又知道STSTST的线段信息就可以求出点坐标OOO的位置。

如果询问的是线段与直线的,我们加上一个叉积判断线段是否在直线的两端即可。

如果询问线段与线段的,我们就直接分别把两条线视为直线/线段进行上面的判断即可。

求垂线/点问题

给出直线lll和直线外一点PPP求它与直线lll的垂点/线

考虑点积
在这里插入图片描述
因为SP⃗∗ST⃗=SO∗ST\vec{SP}*\vec{ST}=SO*STSPST=SOST然后除以ST2ST^2ST2我们就可以得到SO:STSO:STSO:ST然后缩短STSTST一定距离就可以得到OOO点了。

当然如果只是求垂线长度的话直接用面积法也行。

判断点在多边形的内/外

第一种方法就是射线法,该点随机向一个方向射线,如果与奇数条边相交则在内,否则在外。当然这种可能会遇到的包括但不限于以下神奇情况
在这里插入图片描述
当然听大佬说遇到这种情况重新换个方向拉射线就好了(?
特点是运算快,精度高但是特殊情况较多

第二种方法是转角法,该点开始的射线依次转过多边形的每个顶点,如果转回来之后经过了一个圈,那么就在多边形内,否则不在
在这里插入图片描述
特点是比较通用

求两个圆的交点

在这里插入图片描述
根据余弦定理我们有CB2=AC2+AB2−2AC∗AB∗cos∠CABCB^2=AC^2+AB^2-2AC*AB*cos\angle CABCB2=AC2+AB22ACABcosCAB
解出cos∠CABcos\angle CABcosCAB然后用atan2atan2atan2函数算出级角再算出方位角即可


待更新懒得更新了,计算几何爬出OI

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[XSY3343] 程序锁(DP)

XSY3343 先考虑如何判定一个填好的序列会不会gg: 若∃p,q,使s′[p1]t′[q1]−1\exist p,q,使s[p1]t[q1]-1∃p,q,使s′[p1]t′[q1]−1且∑i1ps′[i]∑j1qt′[j]≤0\sum_{i1}^{p}s[i]\sum_{j1}^{q}t[j]\leq 0∑i1p​s′[i]∑j1q​t′[j]≤0,则这个序列必g…

Asp.Net Core SignalR 用泛型Hub优雅的调用前端方法及传参

继续学习最近一直在使用Asp.Net Core SignalR(下面成SignalR Core)为小程序提供websocket支持,前端时间也发了一个学习笔记,在使用过程中稍微看了下它的源码,不得不说微软现在真的强大,很多事情都帮你考虑到了,比如使用Redis,使用Redis后,你的websocket就支持横向扩…

Network POJ-3694

Network POJ-3694 文章目录Description题意:样例分析:题解:代码:Description A network administrator manages a large network. The network consists of N computers and M links between pairs of computers. Any pair of com…

【树状数组】递增子序列(金牌导航 数据结构优化DP-1)

递增子序列 金牌导航 数据结构优化DP-1 题目大意 给出一个序列,让你求长度为m的单调递增子序列的个数 输入样例 3 2 1 1 2 7 3 1 7 3 5 9 4 8输出样例 2 12数据范围 1⩽n⩽104,1⩽m⩽100,0⩽ai⩽9876543211\leqslant n \leqslant 10^4,1\leqslant m \leqslant…

使用.NET Core 2.1的Azure WebJobs

WebJobs不是Azure和.NET中的新事物。 Visual Studio 2017中甚至还有一个默认的Azure WebJob模板,用于完整的.NET Framework。 但是,Visual Studio中以某种方式遗漏了.NET Core中WebJobs的类似模板。 在这篇文章中,我使用的是.NET Core 2.1来创…

P3265-[JLOI2015]装备购买【线性基,拟阵贪心】

正题 题目链接:https://www.luogu.com.cn/problem/P3265 题目大意 给出nnn个有权值的mmm元组。求最大独立集,即一个最大的集合且内部元素线性无关。且在集合最大的情况下权值和最小 通俗的说就是没有任何一个元素内被其他元素的倍数和表示。 解题思路 我们考虑线…

【决策单调性】玩具装箱(金牌导航 决策单调性优化DP-1)

玩具装箱 金牌导航 决策单调性优化DP-1 题目大意 给出若干个物品,把iii到jjj个物品装在一起的长度lj−i∑kijaklj-i\sum_{ki}^{j}a_klj−i∑kij​ak​(物品必须是连续的),其代价为(lL)2(l L)^2(lL)2(L为给出的常数…

HDU4612 Warm up

Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 11184 Accepted Submission(s): 2573HDU4612 Warm up 文章目录Problem Description题意:题解:代码:Problem Description N …

[NOIP2016 提高组] 天天爱跑步(树上差分)

如果没有时间的限制,这题就是对每个点iii,求经过iii的路径数,用树上差分解决即可: 枚举路径x→y{x\to y\{x→y{ a[x]1;a[y]1;a[x]1;a[y]1;a[x]1;a[y]1; a[lca(x,y)]−1;a[fa[lca(x,y)]]−2;a[lca(x,y)]-1;a[fa[lca(x,y)]]-2;a[lc…

.NET Core中的CSV解析库

感谢本篇首先特别感谢从此启程兄的《.NetCore外国一些高质量博客分享》, 发现很多国外的.NET Core技术博客资源, 我会不定期从中选择一些有意思的文章翻译总结一下。.NET Core中的CSV解析库本篇博客来源于.NET Core Totorials的《CSV Parsing In .NET Core》。背景介绍对于初级…

【manacher】双倍回文(金牌导航 manacher-2/luogu 4287)

双倍回文 金牌导航 manacher-2 luogu 4287 题目大意 设串为x,将其取反为x’,定义双倍回文为形如xx’xx’的串 现在给你一个字符串,让你求最大双倍回文子串 输入样例 16 ggabaabaabaaball输出样例 12数据范围 N⩽105N\leqslant 10^5N⩽…

P6178-[模板]Matrix-Tree 定理

正题 题目链接:https://www.luogu.com.cn/problem/P6178 题目大意 给出一个nnn个点mmm条边的无向/有向图。 求所有的生成树/以1为根的外向生成树的权值乘积和。 解题思路 矩阵AAA的行列式表示为det(A)det(A)det(A),定义为 det(A)∑P(−1)μ(P)∏i1nAi,pidet(A)\…

可达性

来源:牛客网 文章目录题目描述题解:代码:时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld题目描述 给出一个 0 ≤ N ≤ 105 点数、0 ≤ M ≤ 105 边…

[集训队作业2018]小Z的礼物(min-max容斥,插头dp)

传送门 这种求 “取到所有物品的期望时间” 的题一般都用 min−maxmin-maxmin−max容斥 解决: 设t(i,j)t(i,j)t(i,j)为取到格子(i,j)(i,j)(i,j)的期望时间,集合S∪c(i,j)′∗′{t(i,j)}S\cup_{c(i,j)*}\{t(i,j)\}S∪c(i,j)′∗′​{t(i,j)} 那么根据min−…

为什么要使用Entity Framework

本文介绍从DDD(Domain-Driven Design[领域驱动设计])的角度来说说为什么要使用Entity Framework(以下都会简称为EF),同时也看出类似Drapper之类的简陋ORM不足的地方。设想业务都是大家知晓的权限管理,实体类如下。读到这里,请先思考一下&…

【Splay】波动值之和(金牌导航 Splay-1)

波动值之和 金牌导航 Splay-1 题目大意 给出一个数列,求∑i1nminj1i−1∣ai−aj∣\sum_{i1}^{n}min_{j1}^{i-1}|a_i-a_j|∑i1n​minj1i−1​∣ai​−aj​∣ 输入样例 6 5 1 2 5 4 6输出样例 12样例解释 5∣1−5∣∣2−1∣∣5−5∣∣4−5∣∣6−5∣541011125|1…

P4336-[SHOI2016]黑暗前的幻想乡【矩阵树定理,容斥】

正题 题目链接:https://www.luogu.com.cn/problem/P4336 题目大意 nnn个点,n−1n-1n−1个边集,求有多少种方案使得每个边集中恰好选出一条边使得这nnn个点连成一棵树。 解题思路 我们需要利用好n−1n-1n−1个边集这个性质,因为nnn很小&…

Tarjan算法

Tarjan算法可以应用在求解 强连通分量,缩点,桥,割点,双连通分量,LCA等 关于文章目录强连通分量代码题目tarjan求割点割点概念流程代码:求无向图的割边/桥理解:代码:强连通…

[集训队作业2018] 万圣节的积木(李超线段树)

传送门 设最底层为第1层,倒数第二层为第2层,以此类推。 发现若第111 ~ iii层构成的积木稳定,第111 ~ jjj (j>ij>ij>i)构成的积木也稳定, 那么第i1i1i1 ~ jjj层构成的积木一定也是稳定的。 所以我们只要找到所有的iii满…

Ocelot简易教程(一)之Ocelot是什么

简单的说Ocelot是一个用.NET Core实现并且开源的API网关技术。可能你又要问了,什么是API网关技术呢?Ocelot又有什么特别呢?我们又该如何集成到我们的asp.net core程序中呢?下面我会通过一些列通俗易懂的教程来为大家讲解。今天的这…