//判断两条线段是否相交,线段1的两端坐标:point、point2 线段2的两端坐标:linePoint1、linePoint2
function isPointInLine(point,point2,linePoint1,linePoint2){
//判断两条线是否平行或者共线
var denominator = (point.y-point2.y)*(linePoint1.x-linePoint2.x)-(point2.x-point.x)*(linePoint2.y-linePoint1.y);
if(denominator==0)
return false;
//获取两条线延伸后的交点坐标
var x = ((point.x-point2.x)*(linePoint1.x-linePoint2.x)*(linePoint2.y-point2.y)+
(point.y-point2.y)*(linePoint1.x-linePoint2.x)*point2.x-(linePoint1.y-linePoint2.y)*(point.x-point2.x)*linePoint2.x)/denominator;
var y = -((point.y-point2.y)*(linePoint1.y-linePoint2.y)*(linePoint2.x-point2.x)+
(point.x-point2.x)*(linePoint1.y-linePoint2.y)*point2.y-(linePoint1.x-linePoint2.x)*(point.y-point2.y)*linePoint2.y)/denominator;
//判断交点是否在线段上
if((x-point2.x)*(x-point.x)<=0 && (y-point2.y)*(y-point.y)<=0 && (x-linePoint2.x)*(x-linePoint1.x)<=0 && (y-linePoint2.y)*(y-linePoint1.y)<=0)
return {x:x,y:y}
return false;
}
function isPointInPolygon(point,poly1){
var temppoly = poly1.split(",");
var poly = new Array();
for(var i = 0;i<temppoly.length/2;i++){
poly[i] = {x:temppoly[i*2],y:temppoly[i*2+1]};
}
//是否点在多边形里
var re=true;
if(poly.length>3){
var crossNum=0;
var point2 = {x:(poly[0].x-poly[1].x)/2,y:(poly[0].y-poly[1].y)/2}
for(var i=1;i<poly.length;i++){
if(i==poly.length-1){
if(isPointInLine(point,point2,poly[i],poly[0])){
crossNum++;
}
}else{
if(isPointInLine(point,point2,poly[i],poly[i+1])){
crossNum++;
}
}
}
if((crossNum % 2)==0){
re=false;
}
}
return re;
}
分享到:
相关推荐
在计算机图形学、游戏开发以及地理信息系统等领域,判断两线段是否相交并求出交点是一个基础且重要的问题。本文将围绕“判断两线段是否相交,相交求交点”这一主题,深入探讨其算法原理及实现细节。 ### 一、问题...
在计算机图形学和几何算法中,判断两条线段是否相交是一个常见的问题。线段是由两点定义的,每个点有其二维坐标(x, y)。线段相交意味着它们在平面上有一个共同的点,而不仅仅是其延长线相交。在VB(Visual Basic)...
在计算机图形学和几何算法中,判断两条线段是否相交是一个常见的问题。这个任务涉及到二维空间中的几何对象,特别是点、直线和线段的概念。本文将深入探讨两种不同的算法来解决这个问题,一种是“暴力”方法,另一种...
在计算机图形学中,判断两条直线是否相交是一项基础但重要的任务。特别是在C#编程环境中,我们经常需要处理这样的问题,比如在游戏开发、几何计算或者数据可视化等场景。本篇将详细介绍如何在C#中判断两条直线是否...
标题 "判断两直线是否相交 C++ MFC" 涉及的是计算机图形学和编程领域的一个基础问题,即在二维空间中如何使用C++和MFC(Microsoft Foundation Classes)来判断两条直线是否交叉。MFC是微软提供的一套C++类库,用于...
判断两条直线是否相交是计算机图形学、计算几何以及数学建模中的一个重要问题。特别是在处理图形、地图数据或者进行路径规划时,该算法的应用尤为广泛。例如,在游戏开发中,用于检测碰撞;在地理信息系统中,用于...
在AS3.0中,我们经常需要处理图形和几何问题,比如判断两条线段是否相交。这个"AS3.0学习之判断两条线段是否相交"的实践项目就是一个典型的例子,它涉及到二维几何的基本概念和算法。下面将详细阐述如何在AS3.0中...
### 判断两线段是否相交的算法与代码解析 #### 知识点一:算法原理 在计算机图形学和几何处理中,判断两线段是否相交是一个基础且重要的问题。解决这个问题的关键在于理解线段相交的数学条件。线段由两个端点定义...
在几何学中,可以通过比较各个边来判断两个多边形是否相交。OpenLayers 3提供了`ol.geom.Polygon`类,用于创建和操作多边形对象。 1. **创建多边形**:在OpenLayers 3中,你可以通过传递一个坐标数组来创建一个...
利用eigen库内矩阵运算函数,写了LinesPositionRelationship3D类。实现了确定三维空间任意两条直线位置关系并获得在平行和交错条件下的两直线距离的功能。该类是在确定空间两圆柱轴线关系下的副产品。
本资源“线段相交检测demo”是基于CocosCreator的一个示例,通过源代码展示了如何在2D环境中检测两条线段是否相交。以下是关于线段相交检测的详细知识点: 1. **线段的基本概念**:线段是由两个不在同一直线上的点A...
2. 判断线段交叉:可以使用向量叉乘的方法来判断两条线段是否相交。如果线段AB和CD的两个交叉点同时位于AB和CD上,则这两条线段相交。具体计算公式为:(B - A) × (D - C) 和 (D - C) × (A - B) 的符号相反。 3. ...
在Java图形编程中,我们经常会遇到需要判断两条直线是否相交的情况。这涉及到几何学的基本原理和编程逻辑的结合。本压缩包中的内容显然是关于如何使用Java实现这一功能的算法。虽然标签上写的是"C#",但根据标题和...
geotools 判断几何要素的交点 当时想到用的GDAL 但是 交点函数返回的对象总是null , 改用 GeoTools 这个库,需要用到jar 到官网上下载,主要是jts-core-1.16.0.jar
1. **判断两个线段是否相交**:线段相交的条件是它们的两个端点分别位于对方线段的两侧。我们可以使用叉积(向量的叉乘)来检查这个条件。如果两个线段的四个端点形成的两对交叉乘积符号相反,则它们相交。下面是...
在本文中,我们将深入探讨计算几何的基本概念,特别是与判断两条直线是否相交相关的算法。题目"POJ 2653"是一个典型的计算几何问题,它的目标是编写程序来检查给定的一组直线(棍子)中哪些是相交的。 首先,我们...
`intersect` 函数用于判断两条由点对定义的直线是否相交。首先,它调用 `intersect1` 函数两次,分别判断第二条直线的端点是否位于第一条直线的一侧或两侧,反之亦然。如果两个端点位于同一侧,则这两条直线不会相交...
4. 检查解的存在性和唯一性:通过判断解的行列式或解的性质来确定交点是否真实存在。 5. 错误处理:当直线平行或重合时,给出适当的错误提示。 在实际应用中,这样的程序可能会被用于更复杂的场景,比如多边形的边...
这部分内容展示了一个C/C++实现的函数`IsLineSegmentCross()`,用于判断两条线段是否相交。线段由两个端点定义,例如线段AB由点A和点B组成。函数的四个参数分别代表两个线段的端点。其基本思想是利用向量的概念,...
源码,有测试数据。内容:1、判断两点构成的直线是否相交;2、判断点是否落在由多点构成的区域内