zoukankan      html  css  js  c++  java
  • 多边形面上一点的算法

    GISPolygon可以是凹多边形,而且还可以带孔,一般我们把多边形的外轮廓叫做外环(Exterior Ring)把孔叫做内环(Interior Ring)。一个多边形必须且只能有一个外环,可以有若干个内环。所谓多边形上一点(Point On Surface)就是指一个必须落在多边形面上而不是空白处(凹多边形的凹口处和带孔多边形的孔洞里)的点。如下图

    image

    很多时候我们需要获得这样的点,例如给多边形加标注时,我们不希望标注显示在多边形的外面。

    获得面上点的方法如下:

    首先获得一个种子点,一般是多边形的几何中心。然后以此点做横线与多边形的所有环相交,将交点以X分量从左向右排序。此时的交点一定是如下的序列:

    0~1,2~3,…,i~i+1其中数值表示序列下标。,如下图:

    clip_image002[4]

    我们只需要在ii+1两点取点,这个点的X分量一定在面上。一般我们取中点。然后以此点做纵线与多边形的所有环相交,将交点以Y分量从上向下排序,我们会得到与上面相似的点序列。如下图

    clip_image002[6]

    从这个序列的i点和i+1点中取中间位置,我们就得到一个多边形面上的点。下图是带孔的情况。

    clip_image002[8]

    紫色的点是最终结果。

    代码下载

  • 相关阅读:
    VS2010 添加项目依赖
    人工鱼群算法 AFSA
    粒子群算法 PSO
    CUDA速度测试
    AGSO 萤火虫算法
    用于WTL工具栏的辅助类CToolBarHelper
    关于结构体内存对齐
    遗传算法 GA
    A*算法
    人工蜂群算法 ABC
  • 原文地址:https://www.cnblogs.com/sillyemperor/p/1616042.html
Copyright © 2011-2022 走看看