明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4739|回复: 12

如何判断点在某个封闭的区域内部?

  [复制链接]
发表于 2003-11-25 08:45:00 | 显示全部楼层 |阅读模式
如何判断点在某个封闭的区域内部?请高手指教
发表于 2003-11-25 09:11:00 | 显示全部楼层

q

q
发表于 2003-11-25 09:18:00 | 显示全部楼层

树形控件

想请教高手两个问题:
1用OBJECTARX如何实现在AUTOCAD主画面上实现树形控件
2如何使用OBJECTARX向导的CLASS WIZARD
谢谢
我的邮箱:wyxcs@163.com
请大家不吝赐教。
顺便问一下:
我为什么不能发贴子啊?
发表于 2003-11-25 15:37:00 | 显示全部楼层
⑴ 对于任意一点可以用射线法判断该点是否在闭合区域内,如图1所示:从该点引一条与多边形相交的水平线并计算与多边形的交点个数,如果交点个数为偶数或零,则该点在区域外,如点A;如果交点个数为奇数,则该点在区域内,如点B,点C。
发表于 2003-11-27 11:16:00 | 显示全部楼层
BOOL ifPointinPolyline(ads_point point, AcDbPolyline *pPl)
{
        AcDbPolyline * pPline=pPl;
        AcGePoint3d point3d;
        point3d[X]=point[X];
        point3d[Y]=point[Y];
        point3d[Z]=point[Z];
       
        AcDbRay *pRay = new AcDbRay();
        pRay->setBasePoint(point3d);
        pRay->setUnitDir(AcGeVector3d(1,0,0));
        AcGePoint3dArray pts;
        pts.setLogicalLength(0);
       
        //用过线段起点的射线与图框求交
        Acad::ErrorStatus es = pRay->intersectWith
(pPline,AcDb::kOnBothOperands,pts);
        if(es!=Acad::eOk){
                delete pRay;
                return 0;
        }
               
        Adesk::Boolean bSt = Adesk::kTrue,bEd = Adesk::kTrue;
        //如果交点数为ji数,说明点在图框内部
        if(pts.length()%2!=0){
                delete pRay;
                return 1;
        }
       
        delete pRay;
        return 0;
}
发表于 2003-11-29 14:29:00 | 显示全部楼层
好像还有一种情况:
顶点在线上,这时候也有一个交点吧?
发表于 2003-11-30 10:09:00 | 显示全部楼层
"某个封闭的区域",这个区域是已知的还是未知的?这两种的算法是不相同的!
发表于 2003-12-1 08:59:00 | 显示全部楼层
仅是抛砖引玉,还望各位大虾不吝丰富小函数,使之圆满
发表于 2003-12-11 14:31:00 | 显示全部楼层
我的代码又贴这了?!
不过有个问题我一直没处理,就是交点正好在区域的一个定点时。用的时候注意啦!!
发表于 2003-12-11 19:38:00 | 显示全部楼层
以上代码没有考虑到凹多边形,自相交的多边形更难判断.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 01:46 , Processed in 0.164274 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表