David Bethel 发表于 2022-7-6 07:10:59

(entmake)3点弧

灵感来源于这条线索:
 
http://www.cadtutor.net/forum/showthread.php?75821-简单的lisp如何删除不必要的步骤单击
 
试图用3个已知点(形成)一条弧
 
P1和p2是终点
 
p3始终位于夹角内的弧上。角度50和51的顺序不对
 

(defun mid_point (s e)
(mapcar '(lambda (a b) (* (+ a b) 0.5)) s e))

(defun c:test ()
(initget 1)
(setq p1 (getpoint "\nArrow Point:   "))

(initget 1)
(setq p2 (getpoint p1 "\nText CENter Point:   "))
(grdraw p1 p2 4 3)
(setq p6 (mid_point p1 p2))

(initget 1)
(setq p3 (getpoint p6 "\nARC Direction Point:   "))
(setq p4 (mid_point p1 p3)
       p5 (mid_point p2 p3)
       ce (inters p4 (polar p4 (+ (angle p1 p3) (* pi 0.5)) 1)
                  p5 (polar p5 (+ (angle p2 p3) (* pi 0.5)) 1) nil)
       ra (distance ce p1))
(grdraw ce p1 1 3)
(grdraw ce p2 2 3)
(grdraw ce p3 3 3)
(prin1))


(entmake (list (cons 0 "ARC")
            (cons 10 ce)
            (cons 40 ra)
            (cons 50 (angle ce p1))
            (cons 51 (angle ce p2))
))

 
从命令行可以很简单
 

(command "_.ARC" "_non" p1 "_non" p3 "_non" p2)

 
有什么建议吗?大卫

Lee Mac 发表于 2022-7-6 07:32:23

这可能有助于:
 
http://lee-mac.com/3pointarccircle.html

David Bethel 发表于 2022-7-6 07:42:02

看起来不错。我认为你的p2在LM:3中总是在p1和p3之间,谢谢-大卫

Lee Mac 发表于 2022-7-6 07:55:55

 
提供的点可以是任何顺序,但是,产生的弧扫掠的角度将取决于点的排列;为了演示,这里有一个快速示例:
 
 
不客气!

David Bethel 发表于 2022-7-6 08:07:24

好的,我理解(我想)
 
我的场景是定义端点,第三个点始终在弧上。我倾向于简单的(命令“_.ARC”)没有那么优雅,但很实用。谢谢!-大卫

Lee Mac 发表于 2022-7-6 08:21:54

 
 
 
在这种情况下,如果将端点作为“p1”和“p3”参数传递给我的LM:3PArc函数,并将第三个点作为“p2”参数,您应该会收到所需的结果,因为圆弧的计算将始终确保提供的点“p2”位于端点“p1”和“p3”之间。
页: [1]
查看完整版本: (entmake)3点弧