![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算几何
lgh544
这个作者很懒,什么都没留下…
展开
-
The Doors POJ - 1556
题目链接:The Doors思路题意:要求的是在一个空间内有许多墙,每个墙上有两扇门你要从最左边中点去最右边中点的最短路。把每扇门看作是两个点然后利用计算几何的知识来判断一下两个点所形成的线段与图中的墙(也就是线段)有没有相交,规范相交与重合才算相交(对于非规范相交还要看是否重合),对于不相交的两个点之间建立边,然后跑dijkstra最短路即可。两线段相交判定//`两线段相交判断` //`2 规范相交` //`1 非规范相交` //`0 不相交` int segcrossseg(Line原创 2020-12-05 20:04:46 · 142 阅读 · 0 评论 -
Intersecting Lines POJ - 1269
题目链接:Intersecting Lines思路题意:给出你两条直线,求出这两条直线的关系,平行输出NONE,重合输出LINE,相交输出交点POINT x y模板题,理解直线关系的求法即可。直线与直线的位置关系 //`点和直线关系` //`1 在左侧` //`2 在右侧` //`3 在直线上` int relation(Point p) { int c = sgn((p - s) ^ (e - s)); if (c < 0)return 1; else if (c原创 2020-12-05 19:54:27 · 126 阅读 · 0 评论 -
Segments POJ - 3304
题目链接:Segments思路题目要求一条直线,使得所有线段在该直线上的投影至少有一个公共点。多画几个图,可以发现,问题实际转化了找到一条直线,使得与所有线段相交。给出来的点肯定都是有用的,猜一猜就知道要在所有线段的端点中枚举两个点, 连成一条直线,判断其它线段是否与该直线相交即可。(简单证明:假设有一条直线A,与线段B线段C分别交与2点,此时我们可以通过恰当的旋转直线,将每条线段的其中一个端点作为交点,本题即假设已存在这样一条直线已与2条线段相交,然后去枚举其它线段判断相交即可)直线和线段相交原创 2020-12-05 19:48:38 · 111 阅读 · 0 评论 -
Toy Storage POJ - 2398
题目链接:Toy Storage思路这个题和上个题做法一致,只是输出变了,而且加个排序。点与直线的位置关系 //`点和直线关系` //`1 在左侧` //`2 在右侧` //`3 在直线上` int relation(Point p) { int c = sgn((p - s) ^ (e - s)); if (c < 0)return 1; else if (c > 0)return 2; else return 3; }主函数int n,m;in原创 2020-12-05 19:42:00 · 104 阅读 · 0 评论 -
TOYS POJ - 2318
题目链接:TOYS思路:很明显的计算几何题,需要用到叉积判断点在线段的左边还是右边暴力的话 n2n^2n2 的复杂度会超时,这里利用二分优化(一个点必然是落在一条直线的右边及下一条直线的左边),把地图的左右边界各自作为一条直线插入,并且考虑到存在点落在边界的情况,这两条新加的直线要对应向地图外偏移一点。点与直线的位置关系 //`点和直线关系` //`1 在左侧` //`2 在右侧` //`3 在直线上` int relation(Point p) { int c = sgn((p原创 2020-12-05 19:37:00 · 91 阅读 · 0 评论 -
二维计算几何基础
图形的记录点在平面直角坐标系下,点用坐标表示,比如点 (5,2) ,点 (-1,0) 什么的。我们记录其横纵坐标值即可。用 pair 或开结构体记录均可。在极坐标系下,用极坐标表示即可。记录其极径与极角。向量由于向量的坐标表示与点相同,所以只需要像点一样存向量即可(当然点不是向量)。在极坐标系下,与点同理。线直线与射线一般在解数学题时,我们用解析式表示一条直线。有一般式 Ax+By+C=0Ax+By+C = 0Ax+By+C=0,还有斜截式 y=kx+by = kx+by=kx+b ,原创 2020-12-03 22:06:53 · 1355 阅读 · 1 评论