计算几何/sgu 124 Broken line

题意

  给出由n条线段围成的多边形(每条边均平行于坐标轴),以及一个点(x0,y0),问这个点是在形内或是形外或是形上

分析

  对于在线段上,比较容易判断,直接比较一下坐标的位置即可;

  若不在形上,则在该点处向上引一条射线。因为是向上引的,所以只和与x轴平行的线有交点,记录交点个数。

      注意在记录交点个数时,如果在一条线段的短点,只记一侧的,别记重了。

  这样,统计相交次数。如果为奇数,则在形内;偶数,形外

 

  注意读入数据后比较一下大小并交换。

 

 

Accepted Code

 1 /*
 2     PROBLEM:sgu 124
 3     AUTHER:Rinyo
 4     MEMO:计算几何
 5 */
 6 #include<cstdio>
 7 const int maxn(10030);
 8 int x1[maxn],x2[maxn],y1[maxn],y2[maxn];
 9 int main()
10 {
11     freopen("in.txt","r",stdin);
12     int n;
13     scanf("%d",&n);
14     for (int i=1;i<=n;i++)
15     {
16         scanf("%d%d%d%d",&x1[i],&y1[i],&x2[i],&y2[i]);
17         if (x1[i]==x2[i])
18         {
19             if (y1[i]>y2[i])
20                 {int t=y1[i];y1[i]=y2[i];y2[i]=t;}
21         }
22         if (y1[i]==y2[i])
23         {
24             if (x1[i]>x2[i])
25                 {int t=x1[i];x1[i]=x2[i];x2[i]=t;}
26         }
27     }
28     int x0,y0;
29     scanf("%d%d",&x0,&y0);
30     for (int i=1;i<=n;i++)
31     {
32         if ((x1[i]==x2[i]) && (x1[i]==x0) && (y1[i]<=y0) && (y2[i]>=y0))
33         {
34             printf("BORDER");
35             return 0;
36         }
37         if ((y1[i]==y2[i]) && (y1[i]==y0) && (x1[i]<=x0) && (x2[i]>=x0))
38         {
39             printf("BORDER");
40             return 0;
41         }
42     }
43     int t=0;
44     for (int i=1;i<=n;i++)
45         if ((y1[i]==y2[i]) && (y1[i]>y0) && (x1[i]<x0) && (x2[i]>=x0)) t++;
46     if (t & 1==1) printf("INSIDE");
47     else printf("OUTSIDE");
48     return 0;
49 }

 

转载于:https://www.cnblogs.com/Rinyo/archive/2013/03/19/2970180.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【注意】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值