计算几何学习9

没有学特定的姿势

做了第二期的一些普通题

发现了自己很容易犯的一些错误

HDU 3264

给你一些互不相交,互不内含的圆,寻找一个最小的半径,使得在某点圆心处以该半径作圆时可以覆盖每个圆至少一半的面积

一看就是二分加两圆的面积交了,但是很智障的是,我当时并没有直接去求交集面积,而是额外去求了圆的交点,并且是求了两个弓形的面积之和

这样讨论起来就麻烦了,圆的优弧情况是对应扇形加上三角形,劣弧是减去,判断优弧劣弧的条件是一方半径平方大于另一方半径加上圆心距平方

不过还是写过了= = 当是敲了一个圆的交点的板子吧

求圆的交点是求出圆心连线 和两圆之差得到的直线的交点,可以知道圆的的交点到至直线交点的距离,就可以求了

poj 2546

这个才是求圆交面积= =

求圆交面积是两个扇形的面积减去两个大三角面积,不用到弓形。

由于边的关系确定,角度可以从余弦定理算出。。。不需要求交

asin返回的是-pi/2 ~ pi/2 而acos是0~ pi atan2是 (-pi,pi]

UVALive 3000

在线段上种树

若干条线段 线段交点的25m范围内不允许种树 两棵树的间隔要大于等于50m

枚举每条线段,求所有线段和他的交点,排个序得到若干区间,每个区间统计答案就行了

= =但是我WA了不知道多少炮

最后才发现是自己在判断交点是否在线段上的问题

一般有两种方法:

1)点和线段两端点的叉积为0,并且点和两端点的点积小于等于0

2)点到直线两端的距离之和等于线段长度

。。。我用的第一种,但是的精度貌似炸了

以后如果求线段交点,最稳的是先叉积用判断线段相交,再求直线交点。。。而不是先求再判断

UVALive 4676

给你两个三角形和他们的速度 问他们最早什么时候相交

很直观的想法是固定一个,让另一个动

判断是否会相交,就是运动三角形的三个点运动得到的射线包含了另一个三角形的一部分

由于判断点是否在一组平行线之间更简单,所以可以做两次

求时间,可以直到最早发生的相交一定是一个点和一个点或者线段相交,所以也需要枚举两次,让哪个动

求射线和线段交点,射线的话可以先求,然后再判断和运动方向判断

一个trick是合成速度为0的时候直接判断初始的时候是否有相交

写的时候发现之前的一个错误,判断两线段是否相交的时候,前面的四条判断语句并非没有用(在非规范相交的时候

有一种情况就是 两线段共线但是并不相交 必须先用判断语句判掉

hdu 3272

给你三个点C,D,H要求你找一条路径从H出发,需要经过C,D,X轴,Y轴(没顺序)最后回到H,路径最短

刚开始很naive的想法是把 C,D的三个对称点加上他们自己枚举一下,固定H,只要总路径既经过X又经过Y就更新答案

但是有错误到达像点的含义是经过一个轴到达实际点,如果像点和其他实际点同侧显然会出现问题,而且两个像点之间的距离是无意义的

看了别人的题解 找到一种简洁的写法

路径是由三条边组成的,边需要跨x或者跨y或者跨原点

我们枚举一条边,如果跨越原点其他两边就不用变了;

或者枚举两条边,一条跨x,一条跨y。

如果本身已经跨越就直接计算距离,否则把同侧的部分对称过去

注意边的长度是像点到实际点,不会有像点到像点的边

明天打算继续做部分题

时间: 2024-11-05 18:19:48

计算几何学习9的相关文章

计算几何学习1

目前在跟着这个题目列表 来学习, 目前进行了一中的大部分,模板是参考唐天晓学长的板子和白书来搞的. 学习的内容: 1.复数类的一些常用操作 typedef complex <double> Point;// 复数类来简化代码 Point a; a.real(), a.imag();// a的实部与虚部 对应二维平面 x,y abs(a);// 向量a的模/a到原点距离 norm(a);// 模的平方 arg(a);// a对应的角度 (弧度制 conj(a);// a的共轭 (来计算点积与叉积

计算几何学习8

由于poj炸了 而题单上有很多poj的题 就先开始第二部分了 学习了两个固定算法 最小圆覆盖和平面上最近点对 平面上最近点对采用的是分治的思想 把一个x有序的序列分成A,B左右两部分 当得到A内最近点对距离,B类最近点对距离后 先更新大序列的答案ans A,B间最近点对的产生 显然在x坐标距离mid点不超过ans的区间内产生 我们把这段区间拿出来,对y排序 再逐对更新 值得注意的地方 1)为了确保速度 可以在第二次对y排序的时候采取对标号排序的方式 2)在枚举点对更新的时候注意在y差值 >= a

计算几何学习6

周末搞完了扫描线的部分 上次说的半平面交问题做法是没问题的 是按照中垂线划分平面 再求核的面积 因为是每加入一个直线就判断 所以n^2的好一点 扫描线板子(poj1177 周长并) #include <cstdio> #include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #define lc(x) (x << 1) #define

计算几何学习5

今天算是把半平面交的nlogn版本搞出来了 也做了一些半平面交的经典题 最重要的是感受到了 计算几何的精度的深深的恶意 nlogn的做法 和凸包类似 维护一个直线的双端队列 极角排序后每次加入一条直线都从队首队尾弹出无效直线 在加入时和队尾直线产生交点 最后队首队尾产生交点 中间还有当队尾两直线向量共线时的问题需要处理一下 总感觉 n^2的做法虽然慢 但是精度似乎比nlogn的要靠谱 计算几何很多特殊情况的处理让人很蛋疼 poj 3335 模板 试了下 nlogn 和 n ^ 2板子 其他比较简

计算几何学习4

今天完成的内容很少 学习了一点半平面交 n^2的做法还是很平易近人 刚开始初始化一个大有界的平面 依次用每条直线去切割平面即可 原有的点如果在当前直线左侧一定会被保留 而原有多边形的线段 可能会在线段中间出现交点 在判断一下即可 不想加入重复的点 就在交点求出后判断一下 模板题 因为没注意题目的读入顺序可能顺时针可能逆时针 并且多边形也不一定凸 调了很久 其实 n^2的 HPI部分没错的 至于nlogn的照着板子敲了一发 WA了 刘汝佳老师板子很简洁 但是排序很迷 说是直线的极角排序 但没给重载

计算几何学习12 + 组队训练

学习了极角排序的一些套路 UVA11696 给你一些圆和一些点,保证点不在圆内,两点相连通当且仅当两点联结的线段不与任何一个圆相交,问联通块个数 跟之前那道UVA很类似 其实更加简单 枚举每个点 把其他所有点和圆对他极角排序 用set维护圆到当前点的切线的最短距离 因为点不在圆内 所以直接判断距离就行了 poj 2280 给你一些A类点 B类点 寻找一条直线 使得线上的点和直线左侧的A类点 直线右侧的B类点数目之和最大 首先可以知道直线一定从 给定两点的连线中产生 所以考虑枚举点 让其他点对他极

计算几何学习3

完成了题表中的前三部分 (由于二.三部分的内容比较少 一. poj 2826 用两条木板来盛雨水 问能接到多少 线段交 分类讨论 1)只要有一条水平 就不能盛水 2)没有交点 不能盛水 3)有交点 但是交点水平上方 没有分别两个端点不能盛水 4)*有两个端点 但是上侧长的一根覆盖了另一条短的 不能盛水 如果都能满足 就利用交点 算一个三角形面积即可 **学习到最后输出浮点数可以 ans + eps 防止出现 - 0.000的情况 或者需要特判一发 poj 3347 给出一种放置正方形序列的方式(

计算几何学习7

今天搞的都是一些简单的解析几何 有一些东西有固定的求法 求角平分线:先通过角的两边算出角度 再旋转其中一个至角平分线的位置 求垂线:直接通过方向向量求出直线的法向量 三角形的三个心: 外心:两个中垂线交点(三角形外接圆就是外心) 内心:两个角平分线交点 垂心:垂线交点(一个顶点在对边法向量上的直线) 圆的切线:点到圆心的直线 旋转一个角度 可以通过半径和到圆心的距离算 求球面距离:习惯通过球坐标系求出两个点直角坐标系中的方向向量 然后通过点积算出圆心角 再乘上球的半径 今天做的都是这些加上一点变

【笔记篇】最良心的计算几何学习笔记(三)

广告: 先是放一下本文的::github传送门:: (不知道为什么要放) 今天发现了一个AMA(Ask me anything)的东西, 觉得非常好玩, 就fork了一个放到自己的github里面, 估计没有人会来问, 所以就放到这里拉拢人气(虽然这里也拉拢不到) 欢迎大家来玩哦~ 地址请戳这个就是传送门啦~ 今天继续计算几何(明明已经颓废了半下午了 计算多边形面积 我们先从最简单的多边形--三角形开始看. 如何计算\(\triangle ABC\)的面积? 这个问题数学课上老师应该说过.. \

【笔记篇】最良心的计算几何学习笔记(六)

半平面交 github传送门 简介 Emmmm学完旋转卡壳感觉自己已经是个废人了.. 修整了一个周末, 回来接着跟计算几何势力硬干... (这个周末是不是有点长?) 今天就讲讲半平面交吧. 请自己回顾必修五 线性规划相关知识... 什么是半平面? 就是一条直线一侧的点构成的集合.. 用解析几何的观点来看就是满足\(Ax+By+C<0\)这个不等式的点的集合. 那么半平面交自然就是许多这样的集合的交集咯~ 最后就很像线性规划做出来的可行域一样... 半平面交可以长这样 这样 甚至这样 也就是说,