zoukankan      html  css  js  c++  java
  • Objectarx 判断点是否在多段线内部

    //作用:判断点是否在多边形内
    //p指目标点, ptPolygon指多边形的点集合, nCount指多边形的边数
    bool COperaDeleteEntByPL::PtInPolygon (AcGePoint2d p, AcGePoint2dArray& ptPolygon, int nCount)
    {
    // 交点个数
    int nCross = 0;
    for (int i = 0; i < nCount; i++)
    {
    AcGePoint2d p1 = ptPolygon[i];
    AcGePoint2d p2 = ptPolygon[(i + 1) % nCount];// 点P1与P2形成连线

    if ( p1.y == p2.y )
    continue;
    if ( p.y < min(p1.y, p2.y) )
    continue;
    if ( p.y >= max(p1.y, p2.y) )
    continue;
    // 求交点的x坐标(由直线两点式方程转化而来)

    double x = (double)(p.y - p1.y) * (double)(p2.x - p1.x) / (double)(p2.y - p1.y) + p1.x;

    // 只统计p1p2与p向右射线的交点
    if ( x > p.x )
    {
    nCross++;
    }

    }

    // 交点为偶数,点在多边形之外
    // 交点为奇数,点在多边形之内
    if ((nCross % 2) == 1)
    return true;
    else
    return false;
    }

  • 相关阅读:
    红黑树
    二叉搜索树
    散列表
    快速排序
    堆排序
    归并排序
    插入排序
    Shell脚本之:函数
    Shell脚本之:退出循环
    ACM刷题之路(四)2018暑假实验室集训——深广搜专题题解
  • 原文地址:https://www.cnblogs.com/Pond-ZZC/p/12744939.html
Copyright © 2011-2022 走看看