C++ ARX二次开发点和闭合多段线的位置关系

本文介绍了在C++ ARX二次开发中判断点与闭合多段线位置关系的方法,包括叉乘判断和射线法,并提供了具体的实现思路:计算点到多段线的最近点,然后沿该方向做射线判断交点数量。文章通过随机生成点并展示不同情况下的测试结果,展示了算法的有效性。
摘要由CSDN通过智能技术生成

一、本节课程
C++ ARX二次开发点和闭合多段线的位置关系

二、本节要讲解的知识点

结合自己的业务场景,想想自己开发中可能碰到的点和闭合多段线相对关系的需求:统计多段线内部的所有图块;还可以拓展判断任意曲线跟多段线的相对关系。

三、具体内容

  1. 计算机图形学、计算几何。判断点是否在多边形内部,一般有以下方法:
  1. 叉乘判断(适合凸多边形):如果将多边形的所有顶点按逆时针排序,那么判断点和每一条边的位置关系,如果点在多边形每一条边的左侧,那么点就在我们的多边形内部。
  2. 射线法:从给定点出发,沿着X轴正方向者负方向做一条射线(射线可能跟多边形没有交点),计算射线跟多边形的交点数量,如果是奇数个交点,在内部偶数个交点在外部。处理下点就在多边形的顶点上的特例。
  1. 本节提供的算法的思路是:
  1. 计算点到多段线的最近点,如果两点之间的距离少于容差,则认为点就在多段线上。
  2. 从给定点出发,沿最近点到给定点的方向做一个射线(之所以这么来做射线,是为了尽可能早可能早判断出点不在多边形内部的情况),计算射线和多段线的交点。
  3. 如果交点中包含了多段线的顶点,就将射线旋转2度继续进行判断;如果不包含多段线的顶点,则根据交点个数来判断点和多段线的位置关系。
  4. 在acrxEntryPoint.cpp文件中添加:

static void YunyouMyGroupTestPtInPoly()

      {

            int count=100000;

            AcDbEntity *pEnt=NULL;

            AcGePoint3d pickPoint;

            if (CSelectUtil::PromptSelctEnts(TEXT("\n选择需要进行测试的闭合多段线:"),AcDbPolyline::desc(),pEnt,pickPoint))

            {

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值