poj2318(叉积判断点的位置+二分查找)

作为一个计算几何入门者,个人感觉是个好题

给定两点(x1,y1)、(x2,y2)确定的直线和一点(x,y),判断点在直线的左边还是右边

代码如下:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define eps 1e-9
#define pi acos(-1.0)
#define N 5000+10
#define P system("pause")
using namespace std;
struct point {
    double x,y;       
};
double a[N],b[N];  //记录每条直线
int c[N];//记录每个块中玩具的数目
double cross(point A,point B)//叉积
{
     return A.x*B.y-A.y*B.x;       
}

int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
    int n,m,i;
    double x1,y1,x2,y2;
    while(scanf("%d",&n) && n)
    {
         memset(c,0,sizeof(c));
         scanf("%d%lf%lf%lf%lf",&m,&x1,&y1,&x2,&y2);
         for(i=1;i<=n;i++)
            scanf("%lf%lf",&a[i],&b[i]);
         a[0]=x1;a[n+1]=x2;
         b[n+1]=x1; b[n+1]=x2;
         double x,y;
         for(i=0;i eps)//点在直线左边 
                      right=mid;
                   else left=mid+1;
            }          
            c[left]++;
         }              
         for(i=0;i<=n;i++)
           printf("%d: %d\n",i,c[i+1]);
         printf("\n");
    }      

//    P;                               
    return 0;    
}

你可能感兴趣的:(acm之计算几何)