这个题目看完题目后就应该知道是要求渠道与校区的交点,也就是求一条直线与多边形的交点,题目有一个重要的信息的——渠道一定会通过校园,那么题目就不用考虑特殊情况,
直接求直线与多边形交点就可以过。
求的时候,先要判断线段与直线是否相交,再求交点,这里的线段就是多边形的每条边。判断的话可以利用直线与线段求交点的模板。我这里是利用直线的方向向量,就是题目给出的两个点,这里记作向量ab,先用向量ab与多边形的每一对相邻的点求叉乘,因为相邻的两个点求出的叉乘相乘为负数,那么肯定该线段与直线相交,在求交点。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
const double eps=1e-8;
const int maxn = 505;
struct point
{
double x,y;
};
struct ploy
{
point node[ maxn ];
int n;
};
point left,right,s;
ploy p,p1,p2;
double cross( point a,point b,point c )
{ ///叉乘
return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
}
double ploy_area( ploy res ){///求多边形面积
double ans=0;
res.nod

本文介绍了解决HDU2528问题的方法,该问题是关于计算一条直线与多边形交点的数量。文章详细阐述了如何利用方向向量判断线段与直线的相交,并给出了具体的C++实现代码。

2516

被折叠的 条评论
为什么被折叠?



