本文主要是介绍poj2318(叉积计算点与直线的关系),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:http://poj.org/problem?id=2318
水水的一道题哇!(来熟悉模板, 哈哈)
判断toys的位置。
思路很简单,叉乘就可以知道点与直线的关系;比如xmult(point p1, point p2, point p0)>0 p1在直线的左侧(p2,p0是直线的端点,左右理解为眼睛顺着直线的方向的左右)。
#include <iostream>
#include <algorithm>
#include <fstream>
#include <iomanip>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <map>using namespace std;struct point
{int x, y;
};struct line
{point a, b;
}l[5050];
int mp[5050];double xmult(point p1, point p2, point p0)
{return (p1.x- p0.x)* (p2.y- p0.y)- (p2.x- p0.x)* (p1.y- p0.y);
}int main()
{int n, m, x1, x2, y1, y2; while(scanf("%d%d%d%d%d%d", &n, &m, &x1, &y1, &x2, &y2)== 6 && n){memset(mp, 0, sizeof(mp));for(int i= 0; i< n; i++){int u, v; scanf("%d%d", &u, &v);point p, q;p.x= u; p.y= y1; q.x= v; q.y= y2;l[i].a= p; l[i].b= q;}for(int i= 0; i< m; i++){point p; scanf("%d%d", &p.x, &p.y);int ans= 0;for(int j= 0; j< n; j++)if(xmult(p, l[j].a, l[j].b)> 0) ans++;mp[ans]++;}for(int i= 0; i<= n; i++) printf("%d: %d\n", i, mp[i]); printf("\n"); }return 0;
}
这篇关于poj2318(叉积计算点与直线的关系)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!