lilq_78 发表于 2007-2-6 16:18:00

[求助]如何判斷POLYLINE是順時針還是逆時針走的?

[求助]如何判斷POLYLINE是順時針還是逆時針走的?

highflybir 发表于 2007-2-6 17:36:00

本帖最后由 作者 于 2007-2-6 17:39:46 编辑 <br /><br /> <p>1、如果多段线只有两个点呢? --根本无法判断顺逆。</p><p>2、如果在三个点以上,只需要判断1、2点的矢量和2、3点的矢量的叉积即可。(可能有退化情况)</p><p>3、再说这样的判断是无意义的,因为多段线可能在中途转向。</p><p></p><p>如果你的需要不是这样的,下面已经有讨论:</p><p><a href="http://www.mjtd.com/Functions/ArticleShow.asp?ArticleID=1090">http://www.mjtd.com/Functions/ArticleShow.asp?ArticleID=1090</a></p>

lilq_78 发表于 2007-2-7 08:21:00

非常感謝!

tchen 发表于 2007-2-8 13:28:00

计算几何的算法 在<a href="http://www.gameres.com">www.gameres.com</a>里搜索有

tcsl9621 发表于 2007-2-14 23:34:00

只有封闭的多义线才有意义。可将多义线变成多折线(将其中的圆弧部分用多条直线拟合)后再判断。

alin 发表于 2007-2-16 22:03:00

(defun C:test(/ ss fd ang offsetObj plineObj)<br/>&nbsp; (if (setq ss (ssget ":s" '((0 . "*POLYLINE"))))<br/>&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp; (setq plineObj (vlax-ename-&gt;vla-object (ssname ss 0)))<br/>&nbsp;&nbsp;&nbsp; (setq fd (vlax-curve-getFirstDeriv plineObj 0.5))<br/>&nbsp;&nbsp;&nbsp; (setq ang (atan (/ (cadr fd) (car fd))))<br/>&nbsp;&nbsp;&nbsp; (setq offsetplineObj (car (vlax-safearray-&gt;list<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-variant-value<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-offset plineObj 0.0001)))))<br/>&nbsp;&nbsp;&nbsp; (if (&gt; (vla-get-length plineobj) (vla-get-length offsetplineobj))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n顺时针.")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n反时针.")<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (vla-delete offsetplineObj)<br/>&nbsp;&nbsp; );progn<br/>&nbsp;&nbsp; (princ "\nNo object selected or object selected is not a polyline.")<br/>&nbsp;);end_if<br/>&nbsp;(princ)<br/>)

前生 发表于 2016-9-24 00:33:37

楼上的运用巧妙
页: [1]
查看完整版本: [求助]如何判斷POLYLINE是順時針還是逆時針走的?