HDU1086-线段相交点个数
来源:互联网 发布:qq教程网源码 编辑:程序博客网 时间:2024/06/11 20:03
向量基础知识:
已知两向量 a=(p2.x-p1.x,p2.y-p1.y) b=(p3.y-p1.y,p3.x-p1.x)
向量积 :(p2.x-p1.x)*(p3.y-p1.y)-(p2.y-p1.y)*(p3.x-p1.x) 根据右手定则可判方向!(可应用于判点是否在直线两侧)
数量积:(p2.x-p1.x)*(p3.x-p1.x) + (p2.y-p1.y)*(p3.y-p1.y) (可判点是否在线段上!)
题解:向量积判断 点 是否在线段的两侧。
当端点在直线上时,用数量积判断点是否在线段上!!
# include<stdio.h># include<string.h>struct Node{ double x,y;}point1[105],point2[105];double Cross(Node p1,Node p2,Node p3) { return (p2.x-p1.x)*(p3.y-p1.y)-(p2.y-p1.y)*(p3.x-p1.x); //向量积 判定方向 点是不是在直线的两边 }double Point(Node p1,Node p2,Node p3){ return (p2.x-p1.x)*(p3.x-p1.x) + (p2.y-p1.y)*(p3.y-p1.y);//当点在这个直线上时,数量积判断它是不是在线段上。}int Segments_intersect(Node p1_start,Node p1_end,Node p2_start,Node p2_end){ double d1,d2,d3,d4; d1=Cross(p1_start,p1_end,p2_start); d2=Cross(p1_start,p1_end,p2_end); d3=Cross(p2_start,p2_end,p1_start); d4=Cross(p2_start,p2_end,p1_end); if(d1*d2<0 && d3*d4<0) return 1; //同时满足四个点都在另一线段的 两侧则相交。 else if(d1==0 && Point(p1_start,p1_end,p2_start)>=0) return 1; //或者一个线段端点在另一个线段上! else if(d2==0 && Point(p1_start,p1_end,p2_end)>=0) return 1; else if(d3==0 && Point(p2_start,p2_end,p1_start)>=0) return 1; else if(d4==0 && Point(p2_start,p2_end,p1_end)>=0) return 1; else return 0;}int main(){ int n,i,j,count,ans; while(scanf("%d",&n)!=EOF && n) { for(i=1;i<=n;i++) scanf("%lf%lf%lf%lf",&point1[i].x,&point1[i].y,&point2[i].x,&point2[i].y); count=0; for(i=1;i<n;i++) { for(j=i+1;j<=n;j++) { ans=Segments_intersect(point1[i],point2[i],point1[j],point2[j]); if(ans==1) count++; } } printf("%d\n",count); } return 0;}
- HDU1086-线段相交点个数
- HDU1086--线段相交
- hdu1086(线段相交)
- hdu1086【线段相交】
- hdu1086判读线段相交
- 专题:计算几何学 线段相交 hdu1086
- HDU1086(判断两线段是否相交)
- hdu1086计算n条线段的交点个数
- HDU1086:You can Solve a Geometry Problem too(线段相交模板)
- You can Solve a Geometry Problem too (hdu1086)几何,判断两线段相交
- hdu1086 You can Solve a Geometry Problem too (判断两线段是否相交)
- hdu 1086 You can Solve a Geometry Problem too(求线段相交点个数 模板)
- hdu 1086 You can Solve a Geometry Problem too(线段相交点的个数)
- hdu1086(线段交点)
- hdu1086+You can Solve a Geometry Problem too(计算几何,计算线段交点个数)
- 计算平面上二条线段的相交点
- 求多条线段相交(暴力了点)
- hdu1086 You can Solve a Geometry Problem too 计算几何求线段交点个数,快速排斥实验+跨立实验
- LeetCode - Container With Most Water
- 五类互联网地址划分
- 推荐C++新手使用Ubuntu下Geany+Scribes C++环境
- ExtJs事件处理
- NYOJ660逃离地球
- HDU1086-线段相交点个数
- 01背包
- kallsyms的分析__内核调试与符号表原理
- log4j 使用
- 简单的增删改查(多表查询)
- 2.2 栈的实现
- 操作系统--进程调度的有关问题(2)
- Windows线程库
- 普通I/O口的追根溯源 (1)