[RGEOS]空间拓扑关系
-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]空间拓扑关系的更多相关文章
- (转)R空间数据处理与可视化
前言 很多朋友说在R里没法使用高德地图,这里给出一个基于leaflet包的解决方法. library(leaflet) # 添加高德地图 m <- leaflet() %>% addTil ...
- JavaScript 空间分析库——JSTS和Turf【转】
https://blog.csdn.net/neimeng0/article/details/80363468 前言 项目中有管线的空间拓扑关系查询需求,在npm中检索到JSTS和Turf两个Java ...
- 【转】阿里巴巴技术专家杨晓明:基于Hadoop技术进行地理空间分析
转自:http://www.csdn.net/article/2015-01-23/2823687-geographic-space-base-Hadoop [编者按]交通领域正产生着海量的车辆位置点 ...
- (数据科学学习手札88)基于geopandas的空间数据分析——空间计算篇(下)
本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在基于geopandas的空间数据分析系列 ...
- AE常见接口之间的关系(较笼统)+arcgis常见概念
常见的接口有如下关系 IworkspaceFactory-------------->IworkSpace------------------>IfeatureWorkSpace ---- ...
- 基于内容的图片检索CBIR(Content Based Image Retrieval)简介
传统的图像检索过程,先通过人工对图像进行文字标注,再利用关键字来检索图像,这种依据图像描述的字符匹配程度提供检索结果的方法,简称“以字找图”,既耗时又主观多义.基于内容的图像检索客服“以字找图”方式的 ...
- openlayer3相关扩展
1 ol3扩展 http://viglino.github.io/ol-ext/ ,里面包含编辑-选择控件,字体,动画,canvas绘制等等实例 2 ol3空间拓扑关系库jsts,有jst衍生过来 h ...
- 基于内容的图片检索CBIR简介
原文地址:http://blog.csdn.net/davebobo/article/details/53171311 传统的图像检索过程,先通过人工对图像进行文字标注,再利用关键字来检索图像,这种依 ...
- GDAL线面互转换(2)
在上一个文章中介绍了线转化为面和面转化为线,其主要的实现思路就是把面中的点取出来构成线,把线中的点取出来构成面,实际上就是一个硬拷贝,无奈客户的实际需求并非如此,客户想要线转面的时候几条相交线构成面, ...
随机推荐
- Adobe Acrobat 不能打开在线pdf。Adobe Acrobat 应用程序正在被终止,因为内存错误
Adobe Acrobat 应用程序正在被终止,因为内存错误. Adobe Acrobat 不能打开在线pdf. 当出现上面两种错误时. 原因可能是Acrobat的更新有问题. 解决方法:打开C:\D ...
- ReSharper插件功能介绍
ReSharper是一款功能非常强悍的Visual Studio的辅助插件,这款插件可用于C#,VB.net,XML,Asp.net,XAML,和构建脚本.ReSharper 9.1版本大改进对 Ja ...
- EasyTouch的使用官方文档操作步骤
对于移动平台上的RPG类的游戏,我们常用虚拟摇杆来控制人物角色的行走和一些行为,相信我们对它并不陌生,之前尝试了EasyTouch2.5,发现并没有最新版的3.1好用,2.5版本的对于自适应没有做的很 ...
- Sprite和UI Image的区别
Unity3D最初是一个3D游戏引擎,而从4.3开始,系统加入了Sprite组件,Unity也终于有了2D游戏开发的官方解决方案.4.6更是增加了新的UI系统uGUI,使得使用Unity开发2D游戏效 ...
- 做BS开发,你应该知道的一些东西
界面和用户体验(Interface and User Experience) 知道各大浏览器执行Web标准的情况,保证你的站点在主要浏览器上都能正常运行.你至少要测试以下引擎:Gecko(用于Fire ...
- mysqlbinlog工具的作用是什么呢,如何将binary log转换为文本格式?
需求描述: 今天在看mysqlbinlog这个工具,就在想这个工具到底是干嘛的呢,在mysql数据库中, binary log中记录了数据库内容的变化或者说修改,这些修改是以二进制的方式存储到 bin ...
- 在WCF中实现双工通信
双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工MEP又具 ...
- swift--Timer实现定时器功能,每个一段时间执行具体函数,可以重复,也可以只执行一次
1,创建 //控制器 timer = Timer.scheduledTimer(timeInterval: 0.001, target: self, selector: #selector(Fifte ...
- Windows10下安装python(配置环境变量)
从官网下载Windows下的python版本,一路按照默认进行安装. 安装之后配置环境变量的步骤如下: 1,点“我的电脑”,右键选“属性”. 2,选择“高级系统设置”--->选“环境变量”--- ...
- 【java】将List中的实体按照某个字段进行分组的算法
如何将List中存放的实体按照某个字段进行分组呢?来看看下面的例子,假如实体中有个字段叫批次号,我们将具有相同批次号的实体放在一起,那么怎么实现呢?看下面的代码: 可以定义个Map,Map的key用于 ...