/*
translation:
给定一些点,再给出若干条直线,对于每一条直线,判断其所有点是否都在同一侧
solution:
很容易想到先求凸包,然后再对凸包上面的点做处理。
note:
* 很明显,只要直线不经过凸包即可。但是怎么快速判断就成了问题。方法是根据凸包上面的点进行二分查找第一个在右侧或者左侧的点。
因为凸包上的点的斜率呈现单调性,故可行。然后对两个点判断是否都在直线同一侧。
*/
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 100000 + 5;
const double INF = 0x3f3f3f3f * 1.0;
const double M_PI = 3.14159265358979323846;
struct Point
{
double x, y;
Point(){}
Point(double x_, double y_):x(x_),y(y_){}
} p[maxn], q[maxn], dup[maxn], convex[maxn];
typedef Point Vector;
int n;
Vector operator + (Vector a, Vector b) { return Vector(a.x + b.x, a.y + b.y); }
Vector operator - (Point a, Point b) { return Point(a.x - b.x, a.y - b.y); }
Vector operator * (Vector a, double p) { return Vector(a.x * p, a.y * p); }
Vector
poj1912(*判断直线是否穿过凸多边形)
最新推荐文章于 2021-06-09 22:09:16 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)