nod684 发表于 2022-7-6 07:31:42

等距多边形

有没有人可以用lisp来绘制等距多边形?
我做的是做一个等距圆,把圆分成几个部分,追踪节点,擦除圆和节点,这就是我的多边形。

Manila Wolf 发表于 2022-7-6 07:35:18

如果我理解正确的话,你的等距圆是一个椭圆。
你们的分割长度都相等吗?
 
如果是这样,杰出的李Mac有一个优秀的程序,将圆和椭圆(以及其他)等长分割成等长的段。
我经常使用这个程序。我相信李不会介意我把你引向这里。谢谢李。
 
可以在李的网站上找到:-
 
http://lee-mac.com/segmentcurve.html

nod684 发表于 2022-7-6 07:38:32

 
谢谢你的回复。对我有一个椭圆
我要找的是一个lisp,它会提示我多边形有多少边,并输入agad的直径。
 
但这也有帮助。谢谢!

marko_ribar 发表于 2022-7-6 07:42:50

也许,这是:
 

(defun transptiso (pt)
(list (+ (car (polar (list 0.0 0.0 0.0) (/ pi 6.0) (car pt)))
       (car (polar (list 0.0 0.0 0.0) (* 5.0 (/ pi 6.0)) (cadr pt))) )

       (+ (cadr (polar (list 0.0 0.0 0.0) (/ pi 6.0) (car pt)))
       (cadr (polar (list 0.0 0.0 0.0) (* 5.0 (/ pi 6.0)) (cadr pt))) )

       0.0
)
)

(defun c:isopolygon (/ pol vertlst vertlstn)
(vl-cmdf "_.ucs" "w")
(vl-cmdf "_.plan" "")
(vl-cmdf "_.zoom" "c" "0,0,0" "")
(vl-cmdf "_.polygon" pause "0,0,0" pause pause)
(setq pol (entlast))
(mapcar '(lambda (x) (if (= (car x) 10) (setq vertlst (cons (cdr x) vertlst)))) (entget pol))
(setq vertlst (reverse vertlst))
(setq vertlstn (mapcar '(lambda (p) (transptiso p)) vertlst))
(entmake
   (append
   (list
       '(0 . "LWPOLYLINE")
       '(100 . "AcDbEntity")
       '(100 . "AcDbPolyline")
       (cons 90 (length vertlstn))
       '(70 . 1)
   )
   (mapcar '(lambda (x) (cons 10 x)) vertlstn)
   (list (list 210 0.0 0.0 1.0))
   )
)
(entdel pol)
(vl-cmdf "_.ucs" "p")
(princ)
)

 
M、 R。

pBe 发表于 2022-7-6 07:47:20

 
听起来很简单。
 
我不确定你需要的和我想要的是否一样。你能贴出想要结果的图片吗?

nod684 发表于 2022-7-6 07:49:58

嗨,M.R。
尝试使用你的例程,但我认为有一些错误,因为生成的多边形不是等距的
 
pBe,附图片

marko_ribar 发表于 2022-7-6 07:53:27

将极轴跟踪设置为45度,在执行例程的同时,使用“内接”选项创建角度为135度的6边多边形。。。你会得到你发布的内容-传统方式。。。我的代码绘制等距多边形-请参阅我附加的jpg。。。
 
M、 R。

pBe 发表于 2022-7-6 07:55:31

 
传统方法意味着存在等圆?

Lee Mac 发表于 2022-7-6 07:58:44

我认为“等轴测”不是描述OP希望获得的结果的正确术语,这可能会误导那些试图提供解决方案的人;也就是说,我不确定自己是否完全理解预期结果。

pBe 发表于 2022-7-6 08:01:37

 
事实上,它确实显示了一个奇数形状的多边形,我试图根据第一篇文章中的描述编写代码(假设存在等圆)
 
(defunc:sample (/ objell sides seg seg2 pts)
(vl-load-com)
(setq objell(car (entsel)))
(setq sides (getint "\nEnter number of sides"))
(setqseg(/ (vlax-curve-getdistatparam
             objell
             (vlax-curve-getendparam objell)
             )
         sides
         ) seg2 0.0
   )
(repeat sides
   (setq
   pts
      (cons (vlax-curve-getpointatdist objell (+ seg seg2)) pts)
   )
   (setq seg2 (+ seg seg2))
   )
(command "_Pline" "_non")
(foreach pt (cons (last pts) pts) (command pt))
(command)
(entdel objell)
(princ)
)
 
我猜这个帖子和OP在另一个论坛上的帖子有关。创建面向上/左/右的等圆
 
http://www.theswamp.org/index.php?topic=42737.0
页: [1] 2
查看完整版本: 等距多边形