zoox 发表于 2003-11-25 08:45:00

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

如何判断点在某个封闭的区域内部?请高手指教

wangchis 发表于 2003-11-25 09:11:00

q

q

wangchis 发表于 2003-11-25 09:18:00

树形控件

想请教高手两个问题:
1用OBJECTARX如何实现在AUTOCAD主画面上实现树形控件
2如何使用OBJECTARX向导的CLASS WIZARD
谢谢
我的邮箱:wyxcs@163.com
请大家不吝赐教。
顺便问一下:
我为什么不能发贴子啊?

tjztsh 发表于 2003-11-25 15:37:00

⑴ 对于任意一点可以用射线法判断该点是否在闭合区域内,如图1所示:从该点引一条与多边形相交的水平线并计算与多边形的交点个数,如果交点个数为偶数或零,则该点在区域外,如点A;如果交点个数为奇数,则该点在区域内,如点B,点C。

zhengkuo 发表于 2003-11-27 11:16:00

BOOL ifPointinPolyline(ads_point point, AcDbPolyline *pPl)
{
        AcDbPolyline * pPline=pPl;
        AcGePoint3d point3d;
        point3d=point;
        point3d=point;
        point3d=point;
       
        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;
}

lockmyeye 发表于 2003-11-29 14:29:00

好像还有一种情况:
顶点在线上,这时候也有一个交点吧?

victory 发表于 2003-11-30 10:09:00

"某个封闭的区域",这个区域是已知的还是未知的?这两种的算法是不相同的!

zhengkuo 发表于 2003-12-1 08:59:00

仅是抛砖引玉,还望各位大虾不吝丰富小函数,使之圆满

stoneball 发表于 2003-12-11 14:31:00

我的代码又贴这了?!
不过有个问题我一直没处理,就是交点正好在区域的一个定点时。用的时候注意啦!!

hothua 发表于 2003-12-11 19:38:00

以上代码没有考虑到凹多边形,自相交的多边形更难判断.
页: [1] 2
查看完整版本: 如何判断点在某个封闭的区域内部?