Pagini recente » Cod sursa (job #736604) | Cod sursa (job #1167516) | Cod sursa (job #1415813) | Cod sursa (job #3121181) | Cod sursa (job #813122)
Cod sursa(job #813122)
#include<fstream>
#include<cmath>
using namespace std;
ofstream g("poligon.out");
int i,j,n,m,xo,yo,nr=0;
struct coord
{
double x,y;
};
coord a[801];
bool interior(double xo,double yo)
{
int i,intersectii=0;
double yy;
for(i=1;i<=n;++i)
{
if((a[i].x<xo&&xo<a[i+1].x)||(a[i].x>xo&&xo>a[i+1].x))
{
yy=((xo*(a[i].y-a[i+1].y)+a[i].x*a[i+1].y-a[i+1].x*a[i].y));
yy=yy/(a[i].x-a[i+1].x);
if(yo==yy)
return 1;
if(yo>yy)
++intersectii;
}
if(xo==a[i].x)
{
if(a[i].y==yo)
return 1;
if(a[i+1].x==xo)
if((a[i].y>yo&&yo>a[i+1].y)||(a[i].y<yo&&yo<a[i+1].y))
return 1;
if((a[i+1].x<xo&&a[i-1].x>xo)||(a[i+1].x>xo&&a[i-1].x<xo))
++intersectii;
}
}
return intersectii%2;
}
int main()
{
ifstream f("poligon.in");
f>>n>>m;
for(i=1;i<=n;++i)
f>>a[i].x>>a[i].y;
a[0]=a[n];
a[n+1]=a[1];
for(i=1;i<=m;++i)
{
f>>xo>>yo;
if(interior(xo,yo))
++nr;
}
g<<nr<<"\n";
return 0;
}