POJ2318TOYS(叉积判断点与直线位置)

题目链接

题意:一个矩形被分成了n + 1块,然后给出m个点,求每个点会落在哪一块中,输出每块的点的个数

就是判断 点与直线的位置,点在直线的逆时针方向叉积 < 0,点在直线的顺时针方向叉积 > 0

 1 // 可以选择二分查找
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <cstdio>
 5 #include <cstring>
 6 using namespace std;
 7 typedef long long LL;
 8 const int Max = 1000 + 10;
 9 int num[Max];
10 //int ux[Max], dx[Max];
11 struct Point
12 {
13     LL ux, dx;
14 };
15 LL Cross(LL x1, LL y1, LL x2, LL y2)
16 {
17     return x1 * y2 - y1 * x2;
18 }
19 int main()
20 {
21     int n, m, x1, x2, y1, y2;
22     while (scanf("%d", &n) != EOF && n)
23     {
24         scanf("%d%d%d%d%d", &m, &x1, &y1, &x2, &y2);
25         for(int i = 1; i <= n; i++)
26             scanf("%d%d", &ux[i], &dx[i]);
27         ux[n + 1] = x2;  // 把最后边界也算进去
28         dx[n + 1] = x2;
29         memset(num, 0, sizeof(num));
30         int x, y, l, r, mid;
31         for (int i = 1; i <= m; i++)
32         {
33             scanf("%d%d", &x, &y);
34             if (!(x >= x1 && x <= x2 && y >= y2 && y <= y1)) // 不在矩形内
35                 continue;
36             l = 1, r = n + 1;
37             while (l < r)
38             {
39                 mid = (l + r) / 2;
40                 if (Cross(x - dx[mid], y - y2, ux[mid] - dx[mid], y1 - y2) > 0)  // 如果 大于 0 说明 点在直线 右侧,所以改变左区间
41                     l = mid + 1;
42                 else
43                     r = mid; // r始终是满足条件的
44             }
45             num[r - 1]++;
46             /*
47             for (int j = 1; j <= n + 1; j++)
48             {
49                 if ( Cross(x - dx[j], y - y2, ux[j] - dx[j], y1 - y2) <= 0)
50                 {
51                     num[j - 1]++;
52                     break;
53                 }
54             }
55             */
56         }
57         for (int i = 0; i <= n; i++)
58             printf("%d: %d\n", i, num[i]);
59         printf("\n");
60     }
61     return 0;
62 }

时间: 2024-09-28 03:27:17

POJ2318TOYS(叉积判断点与直线位置)的相关文章

使用叉积判断两条直线是否相交

两条平面直线是否相交(直线长度大于0,可以重叠) 直线为(x1,y1),(x2,y2)和(x3,y3),(x4,y4) #include <iostream> using namespace std; int cj(int a1,int a2,int b1,int b2,int c1,int c2){     return (c1-a1)*(b2-a2)-(c2-a2)*(b1-a1);} int main(){    int x1,x2,x3,x4,y1,y2,y3,y4;   while(

POJ1269_Intersecting Lines(几何/叉积判断直线位置关系)

解题报告 题目传送门 题意: 判断直线的位置关系(平行,重合,相交) 思路: 两直线可以用叉积来判断位置关系. AB直线和CD直线 平行的话端点C和端点D会在直线AB的同一侧. 重合的话在直线AB上. 剩下就是相交. 求两直线交点可以用面积比和边长比来求. 看下面的图就知道了,推导就比较容易了 #include <iostream> #include <cstring> #include <cstdio> #define eps 1e-6 #define zero(x)

判断两条直线的位置关系 POJ 1269 Intersecting Lines

两条直线可能有三种关系:1.共线     2.平行(不包括共线)    3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, p2, p3, p4,直线L1,L2分别穿过前两个和后两个点.来判断直线L1和L2的关系 这三种关系一个一个来看: 1. 共线. 如果两条直线共线的话,那么另外一条直线上的点一定在这一条直线上.所以p3在p1p2上,所以用get_direction(p1, p2, p3)来判断p3相对于p1p2的关

POJ 1269 Intersecting Lines (判断直线位置关系)

题目链接:POJ 1269 Problem Description We all know that a pair of distinct points on a plane defines a line and that a pair of lines on a plane will intersect in one of three ways: 1) no intersection because they are parallel, 2) intersect in a line becau

简单几何(直线位置) POJ 1269 Intersecting Lines

题目传送门 题意:判断两条直线的位置关系,共线或平行或相交 分析:先判断平行还是共线,最后就是相交.平行用叉积判断向量,共线的话也用叉积判断点,相交求交点 /************************************************ * Author :Running_Time * Created Time :2015/10/24 星期六 09:08:55 * File Name :POJ_1269.cpp *********************************

poj1039——计算几何 求直线与线段交点,判断两条直线是否相交

poj1039——计算几何  求直线与线段交点,判断两条直线是否相交 Pipe Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9439   Accepted: 2854 Description The GX Light Pipeline Company started to prepare bent pipes for the new transgalactic light pipeline. During the de

POJ1269:Intersecting Lines(判断两条直线的关系)

题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点了. #include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> #include <math.h> #include <queue> #

向量叉积判断两线段是否相交

判断两直线p1p2与q1q2是否相交,用向量叉积来判断 如果P x Q >0,则P在Q的顺时针方向: 如果P x Q <0,则P在Q的逆时针方向: 如果P x Q=0,则P与Q共线,可能同向也可能反向 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <iostream> typedef struct node {

POJ 2398 Toy Storage (叉积判断点和线段的关系)

题目链接 Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4104   Accepted: 2433 Description Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing with them. They gave Reza a rectangula