-1.判断两个线段是否平行

 inline bool parallel_seg_seg(Segment_2 S1, Segment_2 S2)
{
Vector_2 u(S1);
Vector_2 v(S2);
Vector_2 w = S1.source() - S2.source();
float D = perp(u, v);
if (abs(D)<SMALL_NUM)
{
return true;
}
return false;
}

0.线段的拐向:已知向量P0P1,向量P1P2

(1)判断点P2在直线P0P1的左边还是在右边,还是在直线上

 // 判断点P2在直线P0P1的左边还是在右边,还是在直线上
//isLeft(): tests if a point is Left|On|Right of an infinite line.
// Input: three points P0, P1, and P2
// Return: >0 for P2 left of the line through P0 and P1
// =0 for P2 on the line
// <0 for P2 right of the line
inline int isLeft( Point P0, Point P1, Point P2 )
{
return ( (P1.x - P0.x) * (P2.y - P0.y)
- (P2.x - P0.x) * (P1.y - P0.y) );
}

1.点在线段上

(1)点是否在共线的线段上

 /// <summary>
/// 点是否在共线的线段上
/// 1 = P is inside S;
/// 0 = P is not inside S
/// </returns>
/// </summary>
/// <param name="P">a point P</param>
/// <param name="S">a collinear segment S</param>
/// <returns></returns>
public static int InSegment(RPoint P, RSegment S)
{
if (S.P0.X != S.P1.X)
{ // S is not vertical
if (S.P0.X <= P.X && P.X <= S.P1.X)
return ;
if (S.P0.X >= P.X && P.X >= S.P1.X)
return ;
}
else
{ // S is vertical, so test y coordinate
if (S.P0.Y <= P.Y && P.Y <= S.P1.Y)
return ;
if (S.P0.Y >= P.Y && P.Y >= S.P1.Y)
return ;
}
return ;
}

点是否在共线的线段上

(2)点是否包含在任意线段内

         /// <summary>
/// 点是否在线段上
/// </summary>
/// <param name="P">任意的点</param>
/// <param name="S">任意线段</param>
/// <returns>1=P点在线段S上;0=P点不在线段S上</returns>
public static int Inside2D_Point_Segment(RPoint P, RSegment S)
{
Vector3d u = S.P1 - S.P0;
Vector3d v = P - S.P0;
double D = RMath.perp(u, v);
//判断u和v是否平行
if (Math.Abs(D) < RMath.SMALL_NUM)
{
if (InSegment(P, S) == )
{
return ;
}
}
return ;
}

2.点在矩形内

 // 点在矩形内
// 1 = P is inside E;
// 0 = P is not inside E
public static int Inside2D_Point_Envelope(RPoint P, REnvelope E)
{
if(P.X>E.LowerLeft.X && P.X>E.TopRight.X && P.Y>E.LowerLeft.Y && P.Y<E.TopRight.Y)
{
return ;
}
else
{
return ;
}
}

3.点在圆内

  点到圆心的距离小于半径

4.点在2D多边形内

  转角方法

  射线方法

5.2D线段在矩形内

6.2D多边形与多边形是否相交

  一种笨方法:首先判断包围盒是否相交,再判断一个多边形的点在另外一个多边形内。

[RGEOS]空间拓扑关系的更多相关文章

  1. (转)R空间数据处理与可视化

    前言 很多朋友说在R里没法使用高德地图,这里给出一个基于leaflet包的解决方法. library(leaflet) # 添加高德地图 m <- leaflet() %>% addTil ...

  2. JavaScript 空间分析库——JSTS和Turf【转】

    https://blog.csdn.net/neimeng0/article/details/80363468 前言 项目中有管线的空间拓扑关系查询需求,在npm中检索到JSTS和Turf两个Java ...

  3. 【转】阿里巴巴技术专家杨晓明:基于Hadoop技术进行地理空间分析

    转自:http://www.csdn.net/article/2015-01-23/2823687-geographic-space-base-Hadoop [编者按]交通领域正产生着海量的车辆位置点 ...

  4. (数据科学学习手札88)基于geopandas的空间数据分析——空间计算篇(下)

    本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在基于geopandas的空间数据分析系列 ...

  5. AE常见接口之间的关系(较笼统)+arcgis常见概念

    常见的接口有如下关系 IworkspaceFactory-------------->IworkSpace------------------>IfeatureWorkSpace ---- ...

  6. 基于内容的图片检索CBIR(Content Based Image Retrieval)简介

    传统的图像检索过程,先通过人工对图像进行文字标注,再利用关键字来检索图像,这种依据图像描述的字符匹配程度提供检索结果的方法,简称“以字找图”,既耗时又主观多义.基于内容的图像检索客服“以字找图”方式的 ...

  7. openlayer3相关扩展

    1 ol3扩展 http://viglino.github.io/ol-ext/ ,里面包含编辑-选择控件,字体,动画,canvas绘制等等实例 2 ol3空间拓扑关系库jsts,有jst衍生过来 h ...

  8. 基于内容的图片检索CBIR简介

    原文地址:http://blog.csdn.net/davebobo/article/details/53171311 传统的图像检索过程,先通过人工对图像进行文字标注,再利用关键字来检索图像,这种依 ...

  9. GDAL线面互转换(2)

    在上一个文章中介绍了线转化为面和面转化为线,其主要的实现思路就是把面中的点取出来构成线,把线中的点取出来构成面,实际上就是一个硬拷贝,无奈客户的实际需求并非如此,客户想要线转面的时候几条相交线构成面, ...

随机推荐

  1. Cookie管理工具

    Cookie Editor 是管理 Cookie 的工具,能识别并编辑IE.Firfox.Netscope Cookie 文件,控制个人隐私信息,修改 Cookie 使用期限,删除历史文件,编辑和删除 ...

  2. delphi7中添加QuickRep

    具体的方法是: delphi主菜单的Project|Options命令, 在Package选项卡的Desing packages列表中如果可以看到QuickReport Components选项, 那 ...

  3. _mysql_exceptions.ProgrammingError:(2014, "commands out of sync; you can't run this command now")

    今天,测试dashboard上的一些graph, 发现,当多个graph同时向后台请求数据(异步)的时候, 出现了上述错误.而且,三个bug交替出现,另外两个bug分别是:python stop re ...

  4. 远程数据库备份到本地出现“Access denied for user 'root'@localhost(using password: YES)”的问题

    由于另外一个人在用远程的server做测试,导致我访问这个远程机器的mysql提示“too many connections”的问题,于是想到干脆把数据库当下来做测试好了,结果用heidiSQLs进行 ...

  5. 第四章 Spring.Net 如何管理您的类___对象、对象工厂和应用程序上下文

    在前面一章我们介绍了依赖注入,控制反转的概念,以及自己动手搭建了一下Spring.Net的环境.通过这些操作,我们知道了Spring.Net 的核心是使用依赖注入或控制反转这种思想来管理业务对象,降低 ...

  6. 什么原因接触接触impala的

    最近一个项目,关于大数据的改造项目,底层选择Impala还是sparkSQL呢? 最后选择Impala.这样就开启了我的Impala学习之旅.我大部分负责Imapa接口开发工作. 我是控制不住的想整个 ...

  7. [转载]SQL truncate 、delete与drop区别

    相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. 不同点: 1. t ...

  8. 第十篇:基于TCP的一对回射客户/服务器程序及其运行过程分析( 上 )

    前言 本文将讲解一对经典的客户/服务器回射程序,感受网络编程的大致框架( 该程序稍作改装即可演变成各种提供其他服务的程序 ):同时,还将对其运行过程加以分析,观察程序背后协议的执行细节,学习调试网络程 ...

  9. mac 安装oracle

    http://www.oracle.com/technetwork/cn/database/10204macsoft-x86-64-087400-zhs.html

  10. 《C++ Primer Plus》第9章 内存模型和名称空间 学习笔记

    C++鼓励程序员在开发程序时使用多个文件.一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型的函数提供函数原型,并将函数定义放在一个独立的源代码文件中.头文件和源代码文件一起定义和实现了用 ...