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;
    }

  • 相关阅读:
    代码之密
    java 流
    JAVA 汇编语言查看
    JIT
    javap生成的字节码
    微信APP
    微信小程序
    PERL IDE
    android-studio 下载
    Windows Driver Foundation-User-Mode Driver Framework 服务不能启动(错误31)问题解决
  • 原文地址:https://www.cnblogs.com/Pond-ZZC/p/12744939.html
Copyright © 2011-2022 走看看