当前位置: 代码迷 >> 综合 >> poj-2318-TOYS-计算几何
  详细解决方案

poj-2318-TOYS-计算几何

热度:78   发布时间:2023-12-19 10:47:18.0

判断一个点在一条直线的哪一侧的时候,可以使用两种方法。

1,用叉积判左右

2,使用直线的斜率判断左右

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
int pan(int x1,int y1,int x2,int y2)
{return x1*y2-x2*y1;
}
int uu[5500];
int ll[5500];
int num[5500];
int main()
{int n,m,x1,y1,x2,y2,x,y;int i;while(cin>>n){if(n==0)break;cin>>m>>x1>>y1>>x2>>y2;memset(num,0,sizeof(num));for(i=1;i<=n;i++){scanf("%d%d",&uu[i],&ll[i]);}for(i=1;i<=m;i++){scanf("%d%d",&x,&y);if(!(x>=x1&&x<=x2&&y>=y2&&y<=y1))continue;int l=1;int r=n+1;int mid=(l+r)/2;while(l<r){if(pan(x-ll[mid],y-y2,uu[mid]-x,y1-y)>0)l=mid+1;else r=mid;mid=(l+r)/2;}num[mid-1]++;// cout<<mid<<endl;}for(i=0;i<=n;i++){printf("%d: %d\n",i,num[i]);}cout<<endl;}return 0;
}