NO9——线段相关

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <math.h>
 4 #include <algorithm>
 5 using namespace std;
 6
 7 struct point
 8 {
 9     double x,y;
10 };
11 point a[105][2];//a[i][0]代表第i条线段的头,a[i][1]代表尾
12
13 double fan(double x,double y)
14 {
15     return x>y?x:y;
16 }
17
18 double fin(double c,double d)
19 {
20     return c<d?c:d;
21 }
22
23 double cnt(point a,point b)
24 {
25     return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
26 }
27
28 int is(point a,point b,point c,point d)
29 {
30     if(a.x==b.x&&c.x==d.x)
31     {
32         return 0;
33     }
34     if(a.x==b.x&&c.x!=d.x)
35     {
36         double m1=a.x;
37         double m2=(a.x-c.x)*(d.y-c.y)/(d.x-c.x)+c.y;
38         if(m1<=fan(a.x,b.x)&&m1>=fin(a.x,b.x)&&m2>=fin(a.y,b.y)&&m2<=fan(a.y,b.y)&&m1<=fan(c.x,d.x)&&m1>=fin(c.x,d.x)&&m2>=fin(c.y,d.y)&&m2<=fan(c.y,d.y))
39             return 1;
40     }
41     if(c.x==d.x&&a.x!=b.x)
42     {
43         double m1=c.x;
44         double m2=a.y+(b.y-a.y)*(c.x-a.x)/(b.x-a.x);
45         if(m1<=fan(a.x,b.x)&&m1>=fin(a.x,b.x)&&m2>=fin(a.y,b.y)&&m2<=fan(a.y,b.y)&&m1<=fan(c.x,d.x)&&m1>=fin(c.x,d.x)&&m2>=fin(c.y,d.y)&&m2<=fan(c.y,d.y))
46             return 1;
47     }
48     double k1=(b.y-a.y)/(b.x-a.x);
49     double k2=(d.y-c.y)/(d.x-c.x);
50     double m1,m2,x,y;
51     if(k1==k2)  return 0;
52     else
53     {
54         m1=a.y-k1*a.x;
55         m2=c.y-k2*c.x;
56         x=(m1-m2)/(k2-k1);
57         y=k1*x+m1;
58         if(x<=fan(a.x,b.x)&&x>=fin(a.x,b.x)&&y>=fin(a.y,b.y)&&y<=fan(a.y,b.y)&&x<=fan(c.x,d.x)&&x>=fin(c.x,d.x)&&y>=fin(c.y,d.y)&&y<=fan(c.y,d.y))
59             return 1;
60     }
61     return 0;
62 }
63
64 int main()
65 {
66     int cas = 1;
67     int n,i,j;
68     while(~scanf("%d",&n),n)
69     {
70         int cnt = 0;
71         for(i = 0;i<n;i++)
72         scanf("%lf%lf%lf%lf",&a[i][0].x,&a[i][0].y,&a[i][1].x,&a[i][1].y);//线段的首尾坐标
73         for(i = 0;i<n;i++)
74         {
75             for(j = i+1;j<n;j++)
76             {
77                 if(is(a[i][0],a[i][1],a[j][0],a[j][1]))
78                 cnt++;
79             }
80         }
81         printf("%d\n",cnt);
82     }
83
84     return 0;
85 }
时间: 2024-11-09 07:24:50

NO9——线段相关的相关文章

计算几何导论

计算几何 计算几何是一门兴起于二十世纪七十年代末的计算机科学的一个分支,主要研究解决几何问题的算法.在现代工程和数学领域,计算几何在图形学.机器人技术.超大规模集成电路设计和统计等诸多领域有着十分重要的应用. 计算几何问题的输入一般是关于一组几何对象的描述,如一组点.一组线段,或者一个多边形的按逆时针顺序排列的一组顶点.输出常常是对有关这些对象的问题的回答,如是否直线相交,是否为一个新的几何对象,如顶点集合的凸包. 本文将介绍一些平面上的计算几何算法.在这些算法中,每个输入对象都是一组点{p1,

iOS绘图教程

Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的绘图.变换.颜色管理.脱屏渲染,模板.渐变.遮蔽.图像数据管理.图像的创建.遮罩以及PDF文档的创建.显示和分析.为了从感官上对这些概念做一个入门的认识,你可以运行一下官方的example code. iOS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES.OpenGL ES是跨平台的

计算几何算法概览 (转)

  一.引言 计 算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题.作 为计算机科学的一个分支,计算几何主要研究解决几何问题的算法.在现代工程和数学领域,计算几何在图形学.机器人技术.超大规模集成电路设计和统计等诸多 领域有着十分重要的应用.在本文中,我们将对计算几何常用的基本算法做一个全面的介绍,希望对您了解并应用计算几何的知识解决问题起到帮助. 二.目录 本文整理的计算几何基本概念和常用算法包括如下内

IOS绘图探索

参考:http://www.cocoachina.com/industry/20140115/7703.html 参考:http://blog.sina.com.cn/s/blog_6b60259a0101c90g.html 参考原文:http://www.cnblogs.com/xdream86/archive/2012/12/12/2814552.html UIBazier使用参考:http://blog.csdn.net/guo_hongjun1611/article/details/78

[HDU 2036]改革春风吹满地

Description " 改革春风吹满地,不会AC没关系;实在不行回老家,还有一亩三分地.谢谢!(乐队奏乐)"话说部分学生心态极好,每天就知道游戏,这次考试如此简单的题目,也是云里雾里,而且,还竟然来这么几句打油诗.好呀,老师的责任就是帮你解决问题,既然想种田,那就分你一块.这块田位于浙江省温州市苍南县灵溪镇林家铺子村,多边形形状的一块地,原本是linle 的,现在就准备送给你了.不过,任何事情都没有那么简单,你必须首先告诉我这块地到底有多少面积,如果回答正确才能真正得到这块地.发愁

如何使用SVG生成超酷的页面预加载素描动画效果

在线演示 本地下载 1 SVG简介 可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准. 2 SVG的特点 与其他图像格式相比(比如 JPEG 和 GIF),使用 SVG 的优势在于: SVG 图像可通过文本编辑器来创建和修改 SVG 图像可被搜索.索引.脚本化或压缩 SVG 是可伸缩的 SVG 图像可在任何的分辨率下被高质量地打印 SVG 可在图像质量不下降的情况下被放大 3 浏览器支持 Internet Exp

计算几何算法概览

源地址:http://dev.gameres.com/Program/Abstract/Geometry.htm   计算几何算法概览 一.引言 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题.作为计算机科学的一个分支,计算几何主要研究解决几何问题的算法.在现代工程和数学领域,计算几何在图形学.机器人技术.超大规模集成电路设计和统计等诸多领域有着十分重要的应用.在本文中,我们将对计算几何常用的基本算法

ios绘图教程(转摘)

Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的绘图.变换.颜色管理.脱屏渲染,模板.渐变.遮蔽.图像数据管理.图像的创建.遮罩以及PDF文档的创建.显示和分析.为了从感官上对这些概念做一个入门的认识,你可以运行一下官方的example code. iOS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES.OpenGL ES是跨平台的

几何基础知识点

原博地址:http://dev.gameres.com/Program/Abstract/Geometry.htm#矢量叉积 怒火之袍     计算几何算法概览 一.引言 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题.作为计算机科学的一个分支,计算几何主要研究解决几何问题的算法.在现代工程和数学领域,计算几何在图形学.机器人技术.超大规模集成电路设计和统计等诸多领域有着十分重要的应用.在本文中,我们