明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 890|回复: 19

[讨论] 封闭四边顶点连线

[复制链接]
发表于 2023-11-22 12:10 | 显示全部楼层 |阅读模式
本帖最后由 117g 于 2023-12-12 21:41 编辑

功能:框选多个闭合的近似四边形,用多段线批量作出各图形4个顶点的连线。
最近帖子比较乱,整理下帖子,感谢大佬提供的源码

点评

直接4个端点顺序连线  发表于 2023-11-22 21:48
发表于 2023-11-23 11:31 | 显示全部楼层
本帖最后由 vitalgg 于 2023-11-23 20:15 编辑

求所有点。然后只有四个角度近似 90度,其它近似0度。
代码容差为 0.05pi,根据需要自行调整。

  1. (defun c:rec4 ()
  2.   (progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))
  3.   (setq lwpls (pickset:to-list (ssget  '((0 . "lwpolyline")))))
  4.   (foreach
  5.    lwpl lwpls
  6.    ;; 分析各点角度
  7.    (setq pts (curve:get-points lwpl))
  8.    (print pts)
  9.    (setq pt-first (car pts))
  10.    (setq pt-end (last pts))
  11.    (setq pts (append (list pt-end) pts (list pt-first)))
  12.    (setq angles '())
  13.    (setq ang 0)
  14.    (setq pts-rec nil)
  15.    (while (and (> (length  pts) 2)
  16.          (or (< ang (* 0.05 pi))
  17.        (> ang (* 1.95 pi))
  18.        (equal ang (* 0.5 pi) (* 0.05 pi))
  19.        (equal ang (* 1.5 pi) (* 0.05 pi)))
  20.          )
  21.      
  22.      (setq ang (-(angle  (cadr pts)(caddr pts))
  23.      (angle (car pts)(cadr pts))))
  24.      (print ang)
  25.      (setq ang (abs ang))
  26.      (if (or (equal ang (* 0.5 pi) (* 0.05 pi))
  27.               (equal ang (* 1.5 pi) (* 0.05 pi)))
  28.          (setq pts-rec (cons (cadr pts) pts-rec)))
  29.      (setq pts (cdr pts)))
  30.    (if (and (= (length pts) 2)  (= 4 (length pts-rec)))
  31.        (entity:make-lwpolyline pts-rec nil 0 1 0)))
  32. )








评分

参与人数 1明经币 +1 收起 理由
117g + 1 感谢大佬的代码

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-11-22 14:34 | 显示全部楼层
本帖最后由 117g 于 2023-11-22 14:45 编辑
liuhe 发表于 2023-11-22 13:12
你的规律性不够明显,如图所示,这个五角星的四个顶点是什么?
通常大家求解的是包围盒

我理解的大致意思 大佬是想根据多段线上的某线计算到下一条相邻线的夹角,依次循环,在角度突变的位置取出顶点,采用这种方式赋值取顶点,确实需要明确的角度取值范围去排除多余节点

       至于大佬讲的五角星形状,我没有考虑去做那种特殊多边形的,要实现的功能和最小外包框的功能不一样,应该是五角星的5个顶点的依次(顺/逆时针都可)的连线。这点我的贴子里确实没有说清楚,非常抱歉

我想应用的范围是  对边是函数拟合线而且外框近似四边形的封闭多段线,所以用xy求和求差的最大最小值是能满足赋值取到这四个点的要求

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-11-22 13:12 | 显示全部楼层
本帖最后由 liuhe 于 2023-11-22 13:25 编辑

你的规律性不够明显,如图所示,这个五角星的四个顶点是什么?
通常大家求解的是包围盒

所谓的近似矩形,只是把多线段的上点 P1 P2 P3  ,如果P1 P2 组成的直线角度和P2 P3组成直线角度  在误差范围内,比如 P1 P2 是 0度角, P2 P3是1度角,那么就把 P2去掉。 以此类推,最后剩余四个顶点。  这个误差是关键

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-11-22 16:51 | 显示全部楼层
做的不错谢谢。
发表于 2023-11-22 16:55 | 显示全部楼层
117g 发表于 2023-11-22 14:34
我理解的大致意思 大佬是想根据多段线上的某线计算到下一条相邻线的夹角,依次循环,在角度突变的位置取 ...

拟合线的线 只有四个顶点,只对这四个顶点排序?
发表于 2023-11-22 20:21 | 显示全部楼层
想复杂了,直接从所有点里取最远的两个点,就是四边形对角点,然后两点连线分别求两侧距离连线最远点。

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 这是好办法,觉得楼主这样做没使用场景

查看全部评分

发表于 2023-11-22 20:44 | 显示全部楼层
这个看起来有点复杂
 楼主| 发表于 2023-11-23 09:40 | 显示全部楼层
liuhe 发表于 2023-11-22 16:55
拟合线的线 只有四个顶点,只对这四个顶点排序?

算是把两条拟合线的两侧端点取出来连线吧
 楼主| 发表于 2023-11-23 09:46 | 显示全部楼层
wangsr 发表于 2023-11-22 16:51
做的不错谢谢。

有个大致的思路,但楼主编程能力为0,半个月参照明经其他大佬的源码才搞出来一部分,还剩一部分没有搞出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-29 00:02 , Processed in 0.202461 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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