POJ 2318 /// 判断点与直线的位置关系
题目大意:
n块玩具箱隔板 m个玩具落地点 给定玩具箱的左上和右下两个端点
接下来给定n块隔板的上点的x和下点的x(因为y就是玩具箱的上下边缘)
接下来给定m个玩具落地点
输出n+1个区域各有的玩具数量
只要判断一下玩具落地点对于n条直线的相对位置即可
当它位于某条直线的左侧时 说明它位于当前直线内的区域
#include <cstdio>
#include <cmath>
#include <string.h>
#include <algorithm>
using namespace std;
const double eps=1e-;
double add(double a,double b)
{
if(abs(a+b)<eps*(abs(a)+abs(b))) return ;
return a+b;
}
struct P {
double x,y;
P(){};
P(double _x,double _y):x(_x),y(_y){};
P operator - (P p) {
return P(add(x,-p.x),add(y,-p.y)); };
P operator + (P p) {
return P(add(x,p.x),add(y,p.y)); };
P operator * (double d) {
return P(x*d,y*d); };
double dot (P p) {
return add(x*p.x,y*p.y); };
double det (P p) {
return add(x*p.y,-y*p.x); };
}st,ed,a[],b[],toy;
int ans[];
int n, m;
int main()
{
while(~scanf("%d",&n)) {
if(n==) break;
scanf("%d%lf%lf%lf%lf",&m,&st.x,&st.y,&ed.x,&ed.y);
for(int i=;i<n;i++) {
scanf("%lf%lf",&a[i].x,&b[i].x);
a[i].y=st.y, b[i].y=ed.y;
}
a[n].x=ed.x, a[n].y=st.y;
b[n].x=ed.x, b[n].y=ed.y; // 加入玩具箱的右边缘
memset(ans,,sizeof(ans));
for(int i=;i<m;i++) {
scanf("%lf%lf",&toy.x,&toy.y);
int k=;
while((a[k]-toy).det(b[k]-toy)>) k++;
/* 判断直线 直到toy在直线的左侧
>0说明 (a[k]-toy)在(b[k]-toy)顺时针方向
即 toy在直线a[k]b[k]的右侧
*/
ans[k]++;
}
for(int i=;i<=n;i++) printf("%d: %d\n",i,ans[i]);
printf("\n");
}
return ;
}
POJ 2318 /// 判断点与直线的位置关系的更多相关文章
- POJ 1269 /// 判断两条直线的位置关系
题目大意: t个测试用例 每次给出一对直线的两点 判断直线的相对关系 平行输出NODE 重合输出LINE 相交输出POINT和交点坐标 1.直线平行 两向量叉积为0 2.求两直线ab与cd交点 设直线 ...
- 判断两条直线的位置关系 POJ 1269 Intersecting Lines
两条直线可能有三种关系:1.共线 2.平行(不包括共线) 3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...
- POJ 2398 map /// 判断点与直线的位置关系
题目大意: poj2318改个输出 输出 a: b 即有a个玩具的格子有b个 可以先看下poj2318的报告 用map就很方便 #include <cstdio> #include < ...
- poj 1269 判断直线的位置关系
题目链接 题意 判断两条直线的位置关系,重合/平行/相交(求交点). 直线以其上两点的形式给出(点坐标为整点). 思路 写出直线的一般式方程(用\(gcd\)化为最简), 计算\(\begin{vma ...
- TOYS(计算几何基础+点与直线的位置关系)
题目链接:http://poj.org/problem?id=2318 题面: TOYS Time Limit: 2000MS Memory Limit: 65536K Total Submiss ...
- Intersecting Lines---poj1269(求两直线的位置关系)
题目链接:http://poj.org/problem?id=1269 题意:给你两条直线上的任意不同的两点,然后求两条直线的位置关系,如果相交于一点输出该点坐标; #include<iostr ...
- 叉积_判断点与三角形的位置关系 P1355 神秘大三角
题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样例) 所有 ...
- Intersecting Lines (计算几何基础+判断两直线的位置关系)
题目链接:http://poj.org/problem?id=1269 题面: Description We all know that a pair of distinct points on a ...
- POJ 3304 /// 判断线段与直线是否相交
题目大意: 询问给定n条线段 是否存在一条直线使得所有线段在直线上的投影存在公共点 这个问题可以转化为 是否存在一条直线与所有的线段同时相交 而枚举直线的问题 因为若存在符合要求的直线 那么必存在穿过 ...
随机推荐
- java script 数组去重两种方法
第一种方法: var arr=[1,1,2,3,4,4,4,5,6,6,6,6]; var arrb=Array(); for(var i=0;i<arr.length;i++) ...
- NX二次开发-UFUN获取边的光顺性UF_MODL_ask_edge_smoothness(找相切面)
#include <uf.h> #include <uf_modl.h> #include <uf_obj.h> UF_initialize(); //获取面的所有 ...
- npm run 同时执行多个命令
在项目中可能需要一套代码同时部署几套环境,每一次改动就需要同时打包N次.这时就需要能够一个命令同时打包多次,省去了很多麻烦. 这里我们需要用到 concurrently 这个 npm 包,能够实现我们 ...
- 探索NDIS HOOK新的实现方法(1)
NDIS HOOK是专业级防火墙使用的一种拦截技术,NDIS HOOK的重点是如何获得特定协议对应NDIS_PROTOCOL_BLOCK指针,获得了该指针,接下来就可以替换该协议所注册的收发函数,而达 ...
- Git 远程仓库分支管理
目录 目录 速查表 关联远程代码仓库 克隆远程仓库 分支管理 创建分支 切换分支 合并分支 删除分支 解决冲突 速查表 指令 作用 git branch 查看分支 git branch newBran ...
- java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
:: - [localhost-startStop-] INFO - Root WebApplicationContext: initialization started -- :: - [local ...
- Unity 如何修改 particle system 的 start color 属性
代码如下: ParticleSystem ps = GetComponent<ParticleSystem>(); var main = ps.main; var color = Colo ...
- iBATIS结果映射
resultMap的元素是在iBATIS的最重要和最强大的元素.您可以通过使用iBATIS的结果映射减少高达90%的JDBC编码,在某些情况下,可以让你做JDBC不支持的事情. ResultMaps的 ...
- 天道神诀---DHCP服务(下篇)
DHCP作用域详解 subnet 定义一个作用域 netmask 定义作用域的掩码 range 允许发放的IP范围 option routers 指定网关地址 option domain-nam ...
- maven javaProject打包发布成服务
1,现在pom.xml中添加打包所需要的jar包. <plugins> <plugin> <groupId>org.apache.maven.plugins< ...