使用叉积判断两条线段是否相交
2015-07-06 15:20
267 查看
来自个人百度空间的文章---2012.2.19
一、基础知识
求两条线段是否相交首先要求两条线段通过快速排斥实验,即做出能包含两条线段的最小的矩形,既是以两条线段作为对角线的
两个矩形,判断两个矩形是否相交,若两个矩形不能同时在x方向和y方向相交,则两条线段不可能相交,通过了快速排斥实验后再
判断两条线段是否互相跨立,既是一条线段的两个端点是否在另一条线段所在直线的两侧,若满足以上两条,则线段一定相交。
叉积的正负性不仅具有数字正负性还具有方向性,而点积的正负性只具有数字正负性。
二、c代码(没测试,别人的)
一、基础知识
求两条线段是否相交首先要求两条线段通过快速排斥实验,即做出能包含两条线段的最小的矩形,既是以两条线段作为对角线的
两个矩形,判断两个矩形是否相交,若两个矩形不能同时在x方向和y方向相交,则两条线段不可能相交,通过了快速排斥实验后再
判断两条线段是否互相跨立,既是一条线段的两个端点是否在另一条线段所在直线的两侧,若满足以上两条,则线段一定相交。
叉积的正负性不仅具有数字正负性还具有方向性,而点积的正负性只具有数字正负性。
二、c代码(没测试,别人的)
typedef struct { double x; double y; }Coordinate; typedef struct { Coordinate start; Coordinate end; }Line; int main() { Line a,b; Coordinate m,n,p; double x,y; bool tag; cout<<"请输入两条线段的坐标:"<>a.start.x>>a.start.y>>a.end.x>>a.end.y; cin>>b.start.x>>b.start.y>>b.end.x>>b.end.y; //先判断两矩形是否在x方向上相交 //若要在x方向上相交,则满足end1.x>start2.x,start1.x=b.start.x&&a.start.x<=b.end.x) tag=true; else tag=false; if(tag==false) { cout<<"两条线段不相交!"<start2.y,start1.y=b.start.y&&a.start.y<=b.end.y) tag=true; else tag=false; if(tag==false) { cout<<"两条线段不相交!"<
相关文章推荐
- GRE写作必备句型
- 使用expdp/impdp传输表空间
- html 表单提交的几种方法
- 经济学人:民主出了什么问题
- 安卓多连击事件的实现
- unity3d实现相机对场景物体的旋转、缩放、平移查看功能、近似于scene下查看场景的效果
- MySQL详解(14)----------事务处理
- android 基于百度地图api获取经纬度
- @override 报错
- ubuntu安装phpmyadmin
- 『HTML5梦幻之旅』 - 仿Qt示例Drag and Drop Robot(换装机器人)
- EL表达式详解
- JAVA基础编程练习题--50道
- 这就是观察者模式
- 正则表达式30分钟入门教程
- Spring Security3配置使用
- jquery的ajax提交form表单
- 通过给事件处理程序传递this参数,获取事件源对象的引用。单机提交按钮时在信息框中显示用户输入的字符。
- 两个有序数组,从中各取一个组成pair,求和最小的前K个pair(杨氏矩阵top k问题)
- Java中的锁机制