[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)
在上一个文章中介绍了线转化为面和面转化为线,其主要的实现思路就是把面中的点取出来构成线,把线中的点取出来构成面,实际上就是一个硬拷贝,无奈客户的实际需求并非如此,客户想要线转面的时候几条相交线构成面, ...
随机推荐
- shell脚本中特定符合变量的含义
shell脚本中特定符合变量的含义: $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过9个 $$ 脚本运行的当前进程PID号 ...
- zoj 1022 - Parallel Expectations
题目:有两个指令序列,在执行时,能够执行随意指令序列的下一条指令.每条指令要一直执行到结束. 求两组指令执行结束后,每一个变量里面存储值的期望. 分析:dp,模拟.这道题算不上难题,只是算得上的麻烦题 ...
- 工作流JBPM_day02:3-预定义的活动1_4-预定义的活动2+在图片上高亮显示正在执行的上活动
工作流JBPM_day02:3-预定义的活动1 工作流JBPM_day02:4-预定义的活动2+在图片上高亮显示正在执行的上活动 活动 Activity 预先定义好的活动 Start开始活动 End结 ...
- web服务器http.server 【python】
参考博客: http://lxneng.iteye.com/blog/492063 http://www.cnblogs.com/itech/archive/2011/12/31/2308697.ht ...
- 最简单的VS-Qt-CMake项目框架
使用qtcreator新建一个空工程,可以得到main.cpp,mainwindow.cpp,mainwindow.h和mainwindow.ui四个文件 下面主要介绍CMakeLists.txt的内 ...
- 用gcc编译成可执行程序 (转)
#gcc hello.c 该命令将hello.c直接生成最终二进制可执行程序a.out 这条命令隐含执行了(1)预处理.(2)汇编.(3)编译并(4)链接形成最终的二进制可执行程序.这里未指定输出文件 ...
- Map的有序实现类和无序实现类
1.HashMap不是有序的: 2.TreeMap和LinkedHashMap是有序的(TreeMap默认升序,LinkedHashMap则记录了插入顺序).
- 腾讯云分布式高可靠消息队列CMQ架构
版权声明:本文由张浩原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/126 来源:腾云阁 https://www.qclou ...
- JavaWeb温习之防止表单重复提交
表单重复提交主要有以下三种情况: 1. 在网络延迟的情况下让用户有时间点击多次submit按钮导致表单重复提交 2. 表单提交后用户点击[刷新]按钮导致表单重复提交 3. 用户提交表单后,点击浏览器的 ...
- Fatal error Using $this when not in object context in
大致意思是 $this 没有上下文,原因是没有对此类进行实例化. 出现此错误的原因是:在FileCommand.php中使用 $this->方法/属性. $this 不是不可以用,而是要看情况用 ...