C#+AE 判断点是否在面内的方法
public double getXMinValue(IPolygon nPolygon)
{
IPolygon sPolygon;
sPolygon = nPolygon;
IPointCollection pPointCollection;
pPointCollection = sPolygon as IPointCollection;
int n = pPointCollection.PointCount;
double[] coordX = new double[n];
for (int i = 0; i < n; i++)
{
IPoint point = pPointCollection.get_Point(i);
coordX[i] = point.X;
}
//对数组进行从小到大排序
System.Array.Sort(coordX);
Xmin = coordX[0];
return Xmin;
}
向左画射线并得到交点个数的代码:
try
{
ILine newLine = new LineClass();
IPoint toPoint = new PointClass();
toPoint.PutCoords(getXMinValue(pPolygon) - 20.0000000000000, pPoint.Y);
newLine.PutCoords(pPoint, toPoint);//给新的直线赋予起始坐标
//苗师兄想法
IPolyline l = new PolylineClass();
l.FromPoint = pPoint;
l.ToPoint = toPoint;
IGeometryCollection pPolyline = new PolylineClass();
ISegmentCollection pPath;
pPath = new PathClass();
object missing1 = Type.Missing;
object missing2 = Type.Missing;
pPath.AddSegment(newLine as ISegment, ref missing1, ref missing2);
pPolyline.AddGeometry(pPath as IGeometry, ref missing1, ref missing2);
IElement element = DrawLineSymbol(pPolyline as IGeometry, pColor);
pGraph.AddElement(element, 0);
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
ITopologicalOperator pTopo = pPolygon as ITopologicalOperator;//pPolygon多边形
IGeometryCollection pGeoCol = pTopo.Intersect((IGeometry)l, esriGeometryDimension.esriGeometry0Dimension) as IGeometryCollection; //执行到这一句有问题;
IPointCollection pPointCol = pGeoCol as IPointCollection;
if ((pPointCol.PointCount) % 2 == 0)
{
MessageBox.Show("射线和多边形的交点个数为:"+pPointCol.PointCount.ToString()+",点在多边形外。");
}
else
{
MessageBox.Show("射线和多边形的交点个数为:"+pPointCol.PointCount.ToString()+",点在多边形内。");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
本文是按照Polygon对象考虑的面,所以并未考虑重叠面的问题。
C#+AE 判断点是否在面内的方法的更多相关文章
- EntityFramework 和 linq 判断是否在指定时间段内的方法
EntityFramework: System.Data.Objects.EntityFunctions.DiffDays(DateTime.Now, inputTime)判断当前时间与指定时间相差多 ...
- shell判断参数值是否在数组内的方法
比如定义数组: arr=("one" "tow" "thr" "three" "four") 1. ...
- 百度地图 判断marker是否在多边形内
昨天画了圆形,判marker是否存在圆形内.今天来画多边形,判断marker在多边形内. 需要引入一个js <script type="text/javascript&quo ...
- 【Unity3D自学记录】判断物体是否在镜头内
判断物体是否在镜头内. 其实很简单的方法 代码如下: using UnityEngine; using System.Collections; public class DJH_IsRendering ...
- hrbustoj 1429:凸多边形(计算几何,判断点是否在多边形内,二分法)
凸多边形 Time Limit: 2000 MS Memory Limit: 65536 K Total Submit: 130(24 users) Total Accepted: 40(1 ...
- C# 判断点是否在多边形内
/// <summary>/// 判断点是否在多边形内/// </summary>/// <param name="pnt">点</par ...
- js jquery 判断元素是否在数组内
js jquery 判断元素是否在数组内 一,js方法 var arr = ["a", "b", "c"]; // js arr.index ...
- js 日期比较大小,js判断日期是否在区间内,js判断时间段是否在另外一个时间段内
/** * 日期解析,字符串转日期 * @param dateString 可以为2017-02-16,2017/02/16,2017.02.16 * @returns {Date} 返回对应的日期对 ...
- JS判断元素是否在数组内
//判断元素是否在数组内 function contains(arr, obj) { var i = arr.length; while (i--) { if (arr[i] === obj) { r ...
随机推荐
- 利用CSS改变输入框的光标颜色
转:http://www.cnblogs.com/gymmer/p/6810367.html 代码: <!DOCTYPE html> <html lang="en" ...
- javascript之继承
主要是参考了<JavaScript高级程序设计(第三版)>这本书,根据自己的理解,做了下面的记录 继承是面向对象(OO)语言里面的概念,有俩种继承方式:接口继承和实现继承.接口继承只继承方 ...
- android:怎么实现一个控件与另一个指定控件左对齐
https://segmentfault.com/q/1010000003905460?_ea=425861 针对你这种情况,最简单的一种办法是,设置两个TextView的宽度为固定值,且相等. Li ...
- Java第三阶段学习(六、多线程)
一.进程和线程的区别: 进程:指正在运行的程序,当一个程序进入内存运行,就变成一个进程. 线程:线程是进程的一个执行单元. 总结:一个程序运行后至少会有一个进程,一个进程可以有多个线程. 多线程:多线 ...
- tail -f 与 tail -F的区别
使用tail -f监控某个文件,将在另一个窗口将该文件删除后,然后再新创建,那么我们会发现tail -f的监制失效了.而使用tail -F会再次进行监控.
- 在谈PHP中的 抽象类(abstract class)和 接口(interface)
一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...
- P3402 最长公共子序列
P3402 最长公共子序列经典问题LCS-->LIS把第一数列转化成1~n,然后将第二个数列映射成1~n中的一些数,然后求第二个数列的LIS即可,然后用Bit求LIS,O(nlogN) //数据 ...
- Docker化高可用redis集群
最近遇到部分系统因为redis服务挂掉,导致部分服务不可用.所以希望搭建一个redis集群镜像,把原先散落各处的redis服务器统一管理起来,并且保障高可用和故障自动迁移. 一:redis集群分类 大 ...
- 网页图表Highcharts实践教程标之添加题副标题版权信息
网页图表Highcharts实践教程标之添加题副标题版权信息 Highcharts辅助元素 辅助元素图表的非必要元素,如标题.版权信息.标签.载入动态.它们不和图表数据发生关联,只是额外说明一些基本信 ...
- BZOJ.1013.[JSOI2008]球形空间产生器(高斯消元)
题目链接 HDU3571 //824kb 40ms //HDU3571弱化版 跟那个一比这个太水了,练模板吧. //列出$n+1$个二次方程后两两相减,就都是一次方程了. #include <c ...