题目要求判断一个多边形是否是凸多边形以及圆是否在凸多边形内部
判断一个多边形是否为凸多边形的思路是:枚举每一条边,观察剩余点是否在这条边的一侧,若对于每条边都是这样的情况,则该多边形是凸多边形,否则不是
判断给定圆是否在凸多边形内部,只需要两点:一个是圆心在凸多边形内部,还有就是圆心到凸多边形每条边的距离都是大于圆的半径的。
代码如下:
判断一个多边形是否为凸多边形的思路是:枚举每一条边,观察剩余点是否在这条边的一侧,若对于每条边都是这样的情况,则该多边形是凸多边形,否则不是
判断给定圆是否在凸多边形内部,只需要两点:一个是圆心在凸多边形内部,还有就是圆心到凸多边形每条边的距离都是大于圆的半径的。
代码如下:
#include <iostream>
#include <cstdio>
#include <cmath>
#define MAX 1e5
using namespace std;
struct node
{
double x,y;
} v[10000],o;
int n;
struct line
{
node a,b;
} l[10000];
double r,s,x,z,y;
int cross(node a,node b,node c)
{
double t;
t=((b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x));
if(t>0)return 1;
else return 0;
}
int judge()
{
int i,j,flag=1;
for(i=0; i<n; i++)
{
scanf("%lf%lf",&v[i].x,&v[i].y);
if(v[i].x>y)y=v[i].x;
if(v[i].x<z)z=v[i].x;
if(v[i].y>s)s=v[i].y;
if(v[i].y<x)x=v[i].y;
}
for(i=0; i<n; i++)