计算几何
fyc_kabuto
一个蒟蒻程序员
展开
-
计算几何小结:叉积
一个神奇的东西,可以判断两线段是否相交,三点共线,多边形角形面积……code:double multi(point p1,point p2,point p0){ double x1=p1.x-p0.x,x2=p2.x-p0.x; double y1=p1.y-p0.y,y2=p2.y-p0.y; return x1*y2-x2*y1;}第一次看到简直一脸懵逼原创 2017-08-03 20:44:25 · 1614 阅读 · 0 评论 -
判断两线段是否相交
预备知识:叉积 点击打开链接好,我们知道叉积的正负代表逆/顺时针那么怎么利用这个性质。观察可知,若相交那么如图所示的旋转方法一定为相同的。但这样还不够所以要另一条线段再做一次if(multi(l2.p1,l1.p2,l1.p1)*multi(l1.p2,l2.p2,l1.p1)>0&&multi(l1.p1,l2.p2,l2.p1)*multi(l2.p2,原创 2017-08-04 08:30:13 · 356 阅读 · 0 评论 -
[caioj]1214:【计算几何】凸包 graham scan求凸包
【题意】 在一个平面坐标系上有n个点,用笔画一个多边形,使得多边形包含这n个点(点在多边形的边上也算包含)。 求多边形的最小周长。题解:显然是要求包含这n个点的最小凸包。我们可以使用Graham Scan来求凸包,时间复杂度为nlog(n)。大概流程:先选择一个y最小的点,若有多个则选择x最小的,接着按扫描顺序对点进行排序,然后建立一个栈,栈中开始只有1、2号点。对于每转载 2017-08-04 14:07:11 · 232 阅读 · 0 评论 -
bzoj 5008: 方师傅的房子
题意:给一个凸包,判断m个点有几个是否在凸包内。强制在线。题解:将第一个点向其他各点连边,那么就有n-1条线段,组成n-2个三角形。 然后二分那个点在哪个三角形内,通过差积判断左右。 最后再判断是否在里面,注意边界问题。 然后我发现我二分SB了,对于这种可能无解的问题,应该先特判或初值个特殊情况。 code:#include<cstdio>#include<cstdlib>#includ原创 2017-09-05 22:09:34 · 311 阅读 · 0 评论 -
AtCoder Regular Contest 082E - ConvexScore
题意:对于每一个凸多边形的顶点集S,定义其权值为2∣n∣−∣S∣2^{|n|-|S|}2∣n∣−∣S∣,n为凸包内的点集。求所有S的权值和。题解:code:#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>using namespace std;...原创 2019-01-04 16:38:39 · 211 阅读 · 1 评论