kry 发表于 2009-8-4 09:27:00

已知多边形求四角点

<font face="宋体" size="2">如图,已知左图求右图中四点~!图中虽然是矩形,但尽量可求平形四边形,而且不能用偏移求此点表</font>

liminnet 发表于 2009-8-4 10:16:00

淮上 发表于 2009-8-4 12:34:00

<p><strong><font color="#1111ee">严重鄙视楼上的行为,愿意帮忙就把代码贴出来,不帮忙就走开,耍什么噱头,真不知道你的水平到底有多高??!!</font></strong></p><p>;;方法通常有三种<br/>;;1.纯AutoLISP方法<br/>;;2.vlax方法<br/>;;3.vla方法<br/>;;下面以第三种为例<br/>;; (HS_get_Vertex (car (entsel)))<br/>(defun HS_get_Vertex (pl_ename / plst lst)<br/>&nbsp; (setq pl_ename (vlax-ename-&gt;vla-object pl_ename)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plst&nbsp;&nbsp;&nbsp;&nbsp; (vlax-get pl_ename 'coordinates)<br/>&nbsp; )<br/>&nbsp; (repeat (/ (length plst) 2)<br/>&nbsp;&nbsp;&nbsp; (setq lst&nbsp; (append lst (list (list (car plst) (cadr plst))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plst (cddr plst)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; lst<br/>)</p>

kry 发表于 2009-8-4 14:15:00

先谢谢楼上的兄弟,但上面的程序不是我想要的,我要求的是4个红色点的点表,而这4个的是由矩形向内偏一个距离,而不是矩形的四个角点

NetBee 发表于 2009-8-4 18:41:00

先使用3楼的程序提取原矩形的角点坐标,再使用最简单的几何变换就行了。这种几何计算方法在网上一搜一大片

kry 发表于 2009-8-4 22:31:00

逛晕,说了等于没说.....

NetBee 发表于 2009-8-5 00:05:00

<p>要别人全新写码给你吗?</p>

淮上 发表于 2009-8-5 08:32:00

<p>(defun GetVertexs (e / i v lst)<br/>&nbsp; (setq i -1)<br/>&nbsp; (while (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))<br/>&nbsp;&nbsp;&nbsp; (setq lst (cons v lst))<br/>&nbsp; )<br/>&nbsp; (if (vlax-curve-isClosed e) (setq lst (cdr lst)))<br/>&nbsp; (reverse lst)<br/>)<br/>;;只对平行四边形有效,因为其他直段的多段线需要提供一个向量<br/>(defun PointsOffset (lst di)<br/>&nbsp; (mapcar '(lambda (x y z / a1 a2 a p)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq a1 (angle y x)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a2 (angle y z)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a&nbsp; (abs (- a1 a2))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (&gt;= a pi)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq a (/ (- (* pi 2) a) 2))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq a (/ a 2))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq p (mapcar '(lambda (x y) (/ (+ x y) 2))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (polar y a1 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (polar y a2 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (polar y (angle y p) (/ di (sin a)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (append (cdr lst) (list (car lst)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lst<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (append (list (last lst)) (reverse (cdr (reverse lst))))<br/>&nbsp; )<br/>)</p><p>;;测试<br/>(defun c:tt (/ e d ps os)<br/>&nbsp; (if (and (setq e (entsel))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq d (getdist "\n指定偏移距离: ")))<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq os (getvar "osmode")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ps (GetVertexs (car e))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ps (PointsOffset PS d)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setvar "osmode" 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply 'command (cons "_.pline" ps))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "_close")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setvar "osmode" os)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (princ)<br/>)<br/></p>

894560869 发表于 2023-2-5 22:21:30

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=178602&highlight=%BD%C7%B5%E3&_dsign=c71b7f8f
页: [1]
查看完整版本: 已知多边形求四角点