随笔分类 - 计算几何
摘要:要点 用A、B、C一般式确定每条直线 将合法的圆心中点存到每条直线所属的vector中 枚举所有线段,二分后$O(1)$得到其中存在多少答案,累加 C++ include include include include include include include include using na
阅读全文
摘要:要点 红蓝点分别求凸包显然 判断两凸包是否相交方法:所有红点不在蓝凸包内,反之亦然;所有红凸包线不与蓝凸包线相交,反之亦然。 书上让特判一下凸包退化成点或线段的情况,为什么我感觉代码仓库的代码并没特判并且线段交和点在线段上写的是不包含端点的??? C++ include include includ
阅读全文
摘要:要点 凸包显然 长方形旋转较好的处理方式就是用中点的Vector加上旋转的Vector,然后每个点都扔到凸包里 多边形面积板子求凸包面积即可 C++ include include include using namespace std; typedef double db; const db ep
阅读全文
摘要:要点 找凸包上的线很显然 但每条线所有点都求一遍显然不可行,优化方法是:所有点都在一侧所以可以使用直线一般式的距离公式$\frac{|A \sum{x}+B \sum{y}+C n|}{\sqrt {A^2+B^2}}$$O(1)$算出总距离 C++ include include include
阅读全文
摘要:要点 各点肯定都在外接圆上,边越多越接近圆面积,所以要最小面积应当取可能的最少边数。 给三角形求外接圆半径公式:$R=\frac{abc}{4S}$。 三个角度对应的圆心角取gcd即是要求的正多边形的一个角度,然后求面积即可。注意三个圆心角的求法是三个内角乘2. C++ include includ
阅读全文
摘要:要点 结论:如果坐标系一堆点两两对称于某一重心,则排序后第1个和第n个为一对,以此类推。 枚举所有可能的重心点并check。因为隐藏的点不超过k个,所以点1~k+1都可能跟第n个匹配。对右侧同样适用,因此枚举的点是$k^2$的。内部只要两边开始扫描,如果匹配不是当前重心则说明他俩不是一对,则加一个虚
阅读全文
摘要:球冠公式是$\frac{\pi h^2(3R h)}{3}$,这样再余弦公式用$R_a$和$R_b$导一导两个球冠的$h$就做完了。算是补了个camp时没做出来的小坑了。 C++ include using namespace std; typedef double db; const db eps
阅读全文
摘要:可以变换坐标:x' = x, y' = y - x ^ 2,如此之后可得线性函数x' * b + c = y',可以发现两点连边为抛物线,而其他点都在这条线下方才满足题意,故而求一个上凸壳即可。
阅读全文
摘要:目前基本都是从蓝书上摘录的。 有一部分需要线性代数的知识,但是蓝书作者并没有解释,个人觉得用数学知识推出来更有助于记忆,死记硬背板子容易忘。以后有机会的话我在这里写点注解。 二维基础操作: 圆相关(他那个两圆公切线看着有点奇怪先不贴了):
阅读全文
摘要:断断续续写了250多行的模拟,其间被其他事情打扰,总共花了一天才AC吧~ 这道题目再次让我明白,有些事情看起来很难,实际上并没有我们想象中的那么难。当然了我主要指的不是这个题的难度…… 也是初学计算几何,然后居然胆大妄为地不用刘汝佳的思路去实现这些个功能,其中有三个功能是我用自己的思路实现的吧(瞎暴
阅读全文