明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6884|回复: 18

[求多边形内相对中心点] 源码

[复制链接]
发表于 2012-12-16 10:46:44 | 显示全部楼层 |阅读模式
本帖最后由 yanguangfei 于 2012-12-16 10:50 编辑


很费神的收点辛苦费啦
求得的点不会出多边形奥
感谢  辰 提供算法
感谢  E派指正
感谢 所有关注求闭合多段线的心【不是一般的心】(望高手出手)感激不尽(已解决) 的人


该贴已经同步到 yanguangfei的微博

本帖子中包含更多资源

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

x
发表于 2013-7-3 10:42:35 | 显示全部楼层
没币下不了。
回复 支持 1 反对 0

使用道具 举报

发表于 2022-2-21 15:35:35 | 显示全部楼层
大神告诉我,坐标值大了的情况下IntersectWith交点在顶点0.01范围内就会出错,所以会出现14楼那种错误,所以我在代码里加了一点修正。这个函数在测绘里还是很有用的!
  1. ;;;求多边形内相对中心点[V 1.0]
  2. ;;; 2012-11-15
  3. ;;; 感谢 辰     提供方法
  4. ;;; 感谢 学院派 指正
  5. ;;;  by yanguangfei
  6. (defun Get_center_relative (ename / 2R DelLine DistList i lst lst1 Mk Mkline N Newlst Number obj points Pt pt1 Pts R Tssbak Tssred TssSub)
  7.   (setq Obj     (Vlax-Ename->Vla-Object ename)
  8.     Tssbak  (Vlax-Get Obj 'Thickness )
  9.     TssSub  (Vlax-Put Obj 'Thickness 0 )
  10.    
  11.   )
  12.   (setq Pts     (GetBoundingBox ename)
  13.     2R      (MJ:MIDPOINT (CAR Pts) (CADR Pts))
  14.     Mk      (entmake (list (cons 0 "LINE")(cons 8 "JMDSS")(cons 10 (polar 2R 0.0 1000))(cons 11 (polar 2R pi 1000))))
  15.     Mkline  (entlast)
  16.     points  (vlax-invoke (vlax-ename->vla-object ename) 'IntersectWith (vlax-ename->vla-object Mkline) acExtendOtherEntity)
  17.     Tssred  (Vlax-Put Obj 'Thickness (eval Tssbak) )
  18.     DelLine (entdel Mkline)
  19.     i       0
  20.     lst     nil
  21.     lst1     nil  
  22.   )
  23.   (repeat (/ (length points) 3)
  24.     (setq lst (append lst (list (list (nth i points) (nth (1+ i) points) (nth (+ 2 i) points)))))
  25.     (setq i (+ i 3))
  26.   )
  27.   (foreach p1 lst;去掉vla-IntersectWith的bug
  28.     (setq pt1 (vlax-curve-getClosestPointTo ename p1))
  29.     (if (equal pt1 p1 1e-8)
  30.       (setq lst1 (append (list p1) lst1))
  31.     )
  32.   )
  33.   (setq lst (px lst1))
  34.   (if (>= (length lst) 4)
  35.     (progn
  36.       (setq N      0
  37.         Newlst nil)
  38.       (repeat (/ (length lst) 2)
  39.         (setq Newlst (append Newlst (list (list (nth N lst) (nth (1+ N) lst)))))
  40.         (setq N (+ 2 N))
  41.       )
  42.       (setq DistList nil
  43.         R        0)
  44.       (repeat (length Newlst)
  45.         (setq Number (nth R Newlst)
  46.           DistList (append DistList  (list(distance (car Number) (cadr Number)))))
  47.         (setq R (1+ R))
  48.       )
  49.       (setq  Pt (nth (vl-position (car (vl-sort DistList '>)) DistList) Newlst))
  50.       (MJ:MIDPOINT (car pt) (cadr pt));返回值
  51.     )
  52.     (MJ:MIDPOINT (car lst) (cadr lst));返回值
  53.   )
  54. )


发表于 2022-4-13 16:44:32 | 显示全部楼层
轮回 发表于 2022-2-21 15:35
大神告诉我,坐标值大了的情况下IntersectWith交点在顶点0.01范围内就会出错,所以会出现14楼那种错误,所 ...

用了一下。提示:错误: 参数太少。不懂问题在哪
发表于 2012-12-16 19:10:48 | 显示全部楼层
这么快哦,,先支持一个,,下来试一试,,,,

点评

你不说话对你必须免费  发表于 2012-12-18 22:09
发表于 2012-12-21 13:26:23 来自手机 | 显示全部楼层
好程序。顶一下。
发表于 2013-2-28 23:41:05 | 显示全部楼层
发发
发表于 2013-5-2 11:41:26 | 显示全部楼层
找了好久终于解决了。
发表于 2013-5-4 20:01:03 | 显示全部楼层
本帖最后由 yshf 于 2013-5-4 22:10 编辑

没有那条水平线与多边形交点数为奇数时的处理
发表于 2013-7-3 11:11:58 | 显示全部楼层
暂时用不上,不过有源码,顶起
发表于 2013-7-11 19:55:21 | 显示全部楼层
为了测试,我必须下啊~~
发表于 2013-12-31 13:36:39 | 显示全部楼层
支持,下载学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 20:28 , Processed in 0.184677 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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