明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2502|回复: 7

已知一闭合多边形,有判断该闭合多边形为三角形、长方形、梯形的现成算法吗?谢谢!

[复制链接]
发表于 2003-1-11 14:13:00 | 显示全部楼层 |阅读模式
发表于 2003-1-14 13:44:00 | 显示全部楼层

try this...

(defun c:PGtype(/ en ed vtnum vtlist cnt)
  (setq en (car (entsel "\nSelect a closed polyline: ")))
  (setq ed (entget en))
  (if (= (cdr (assoc 0 ed)) "LWPOLYLINE")
    (progn
       (if (= (cdr (assoc 70 ed)) 1)
         (progn
           (setq vtnum (cdr (assoc 90 ed)))
           (setq vtlist '() cnt 1)
           (while (<= cnt vtnum)
             (setq vt (cdr (assoc 10 ed)))
             (if (not (member vt vtlist))
                (setq vtlist (append vtlist (list vt))))
             (setq ed (cdr (member (assoc 10 ed) ed)))
             (setq cnt (1+ cnt))
           )
           (setq vtnum (length vtlist))
           (cond ((= vtnum 3)
                  (alert "Triangle!"))
                 ((= vtnum 4)
                  (if (or (= (rtos (angle (nth 0 vtlist) (nth 1 vtlist)) 2 10)
                             (rtos (angle (nth 3 vtlist) (nth 2 vtlist)) 2 10))
                          (= (rtos (angle (nth 1 vtlist) (nth 2 vtlist)) 2 10)
                             (rtos (angle (nth 0 vtlist) (nth 3 vtlist)) 2 10)))
                      (if (and (= (rtos (angle (nth 0 vtlist) (nth 1 vtlist)) 2 10)
                                  (rtos (angle (nth 3 vtlist) (nth 2 vtlist)) 2 10))
                               (= (rtos (angle (nth 1 vtlist) (nth 2 vtlist)) 2 10)
                                  (rtos (angle (nth 0 vtlist) (nth 3 vtlist)) 2 10)))
                          (alert "Rectangle!")
                          (alert "Trapezia!")
                      );endif
                  (Alert "Closed quilaterals except rectangle & trapezia!")
                  );endif
                )
                (T
                  (Alert "Closed Polygon except triangle, rectangle & trapezia!")
                )
            );cond
         );progn
         (alert "Not closed!")
      );endif
    );progn
  (Alert "Not a LWPOLYLINE!")
);endif
(princ)
)
 楼主| 发表于 2003-1-16 10:53:00 | 显示全部楼层

谢谢!但是存在这样的一些问题...

无论是三角形、长方形、梯形都存在一个边上有多个点的问题,这样就可能存在包含四个顶点的闭合多边形是三角形!对于长方形、梯形也一样!
发表于 2003-1-16 19:08:00 | 显示全部楼层

那就先遍历所有线段,如果相邻两线段斜率一样则删除顶点

发表于 2003-1-16 21:49:00 | 显示全部楼层

程序中已把重复的滤掉,你使用过程中有问题吗?

(if (not (member vt vtlist))
                (setq vtlist (append vtlist (list vt))))
没有看见?
发表于 2003-1-17 00:12:00 | 显示全部楼层

你可以将相交的线打断,重复的线删除,然后取点。

 楼主| 发表于 2003-1-17 09:15:00 | 显示全部楼层

谢谢!有点问题.即对于斜率相同的多个连续线没有处理.

 楼主| 发表于 2003-1-17 09:22:00 | 显示全部楼层

谢谢!问题正是按照这种方法得到解决!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 02:49 , Processed in 0.184298 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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