球球也疯狂 发表于 2008-12-7 14:11:00

[求助]请问在arx中如何判断一点在多段线的左边还是右边?

如题,谢谢!

nogirlfriend 发表于 2008-12-17 14:49:00

<p>转一下网上别人的解答 </p><p></p><p>判断一个点在曲线的左侧还是右侧的算法经常要用到,其实通过<a name="baidusnap0"></a>arx来实现要更简单一些,先介绍一下算法:<br/>1.首先根据所给的点pt,在曲线上找到距离此点最近的一个点ptOnCurve(一般都是垂点)<br/>2.求出最近点ptOnCurve在曲线上的一阶导数deriv1,也就是切线方向。注意:这个切线和曲线的方向是相关的<br/>3.求出pt和ptOnCurve所形成的向量testvec(由ptOnCurve指向pt)<br/>4.求出与testvec正交的向量,可通过perpVector来实现,这个函数把向量testvec顺时针旋转90度后得到一个新向量<br/>5.因为deriv1是和曲线方向相关的,所以判断两个向量(deriv1与testvec)是否同向即可判断出给定点在曲线的左侧还是右侧<br/><br/>下面是代码:<br/><br/><br/></p><div class="vbbcss_codetitle2">&gt;&gt;&nbsp;CODE</div><div class="vbbcss_codewinbg2"><pre style="WORD-WRAP: break-word;">bool IsLeftOfCurve(const AcDbCurve* pCurve, AcGePoint3d pt);<br/>
{<br/>
AcGePoint3d ptOnCurve;<br/>
pCurve-&gt;getClosestPointTo(pt, ptOnCurve);<br/>
AcGeVector3d deriv1, testvec;<br/>
pCurve-&gt;getFirstDeriv(ptOnCurve, deriv1);<br/>
testvec = pt.asVector() - ptOnCurve.asVector();<br/>
<br/>
return (testvec.perpVector().isCodirectionalTo(deriv1));<br/>
}</pre><pre style="WORD-WRAP: break-word;"></pre><pre style="WORD-WRAP: break-word;"></pre></div>

球球也疯狂 发表于 2009-1-7 22:37:00

呵呵,就是这样,搞定了,谢谢
页: [1]
查看完整版本: [求助]请问在arx中如何判断一点在多段线的左边还是右边?