{"id":1297,"date":"2012-12-24T19:54:43","date_gmt":"2012-12-24T11:54:43","guid":{"rendered":"https:\/\/www.highflybird.com\/blog\/?p=143"},"modified":"2012-12-24T19:54:43","modified_gmt":"2012-12-24T11:54:43","slug":"%e5%9c%86%e8%ae%ba","status":"publish","type":"post","link":"https:\/\/www.highflybird.com\/blog\/?p=1297","title":{"rendered":"\u5706\u8bba"},"content":{"rendered":"<p>\u5bf9CAD\u4e2d\u5706\u548c\u5f27\u7684\u7814\u7a76\u3002\u5305\u62ec\u5982\u4e0b\u5185\u5bb9\uff1a<br \/>\n\u5706\u548c\u5f27\u7684\u57fa\u672c\u8981\u7d20\uff0c\u5706\u7684\u548c\u5f27\u7684\u5468\u957f \uff0c\u9762\u79ef\uff0c\u8d28\u5fc3\uff1b<br \/>\n\u5b83\u4eec\u7684\u79cd\u79cd\u4f5c\u56fe\u6cd5\uff0c\u8b6c\u5982\u4e09\u70b9\u753b\u5706\uff0c\u4e09\u5207\u7ebf\u753b\u5706\u7b49\uff1b<br \/>\n\u5b83\u4eec\u4e0e\u70b9\u3001\u5706\u548c\u76f4\u7ebf\u7684\u5173\u7cfb\u53ca\u5176\u5224\u65ad\u3002<br \/>\n\u7b49\u7b49 \u3002<br \/>\n\u4e0b\u9762\u662f\u76f8\u5173\u4ee3\u7801\uff1a<br \/>\n<!--more--><br \/>\n[codesyntax lang=&#8221;lisp&#8221;];;;****************************************************;<br \/>\n;;;\u5706\u548c\u5f27\u90e8\u5206                                          ;<br \/>\n;;;****************************************************;<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5224\u65ad\u70b9\u8ddf\u5706\u7684\u4f4d\u7f6e\u5173\u7cfb                                ;<br \/>\n;;;\u8f93\u5165\uff1aPt,\u8981\u5224\u65ad\u7684\u70b9\uff0cCen,\u5706\u5fc3\uff0cRad\u534a\u5f84              ;<br \/>\n;;;\u8f93\u51fa\uff1a0 \u4e3a\u5728\u5706\u4e0a\uff0c-1\u4e3a\u5728\u5706\u5185\uff0c1\u4e3a\u5728\u5706\u5916             ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:GetPos (Pt Cen Rad \/ d)<br \/>\n  (setq d (distance cen pt))<br \/>\n  (cond<br \/>\n    ( (equal d Rad 1e-8) 0)<br \/>\n    ( (&lt; d Rad) -1)<br \/>\n    ( t 1)<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5224\u65ad\u4e24\u70b9\u5bf9\u67d0\u4e2a\u5706\u662f\u5426\u5f02\u4fa7                            ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Is_Opposite_Side (rad d1 d2)<br \/>\n  (or (and (&gt; d1 rad) (&lt; d2 rad)) (and (&lt; d1 rad) (&gt; d2 rad)))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5224\u65ad\u4e24\u70b9\u5bf9\u67d0\u4e2a\u5706\u662f\u5426\u540c\u4fa7                            ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Is_Same_Side (rad d1 d2)<br \/>\n  (or (and (&gt; d1 rad) (&gt; d2 rad)) (and (&lt; d1 rad) (&lt; d2 rad)))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;This is known as the &#8220;secant-tangent theorem&#8221;,      ;<br \/>\n;;;&#8221;intersecting chords theorem&#8221;,   &#8220;Secant Theorem&#8221;   ;<br \/>\n;;;or the &#8220;power-of-a-point theorem&#8221;                   ;<br \/>\n;;;\u5272\u5f26\u5b9a\u7406                                            ;<br \/>\n;;;\u8f93\u5165: \u5728\u5706\u4e0a\u7684\u4e00\u70b9Pc\uff0c\u4e00\u7ed9\u5b9a\u70b9P\uff0c\u7ed9\u5b9a\u5706\u5706\u5fc3C\u548c\u534a\u5f84R ;<br \/>\n;;;\u8f93\u51fa: \u7ecf\u8fc7\u5b9a\u70b9Pt\u548cPC\u7684\u5f26\u7684\u53e6\u4e00\u70b9                    ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Intersecting_Chords (Pc P C R \/ d L eps)<br \/>\n  (setq eps 1e-6)<br \/>\n  (setq d (distance P C))<br \/>\n  (if (equal d R eps)<br \/>\n    P<br \/>\n    (polar P (angle P Pc) (\/ (* (+ d R) (- d R)) (distance P Pc)))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u6c42\u76f4\u7ebf\u548c\u5706\u7684\u4ea4\u70b9                                    ;<br \/>\n;;;\u8f93\u5165\uff1a\u5706\u5fc3\uff0c\u534a\u5f84\u548c\u76f4\u7ebf\u7684\u4e24\u4e2a\u7aef\u70b9                    ;<br \/>\n;;;\u8f93\u51fa\uff1a\u76f4\u7ebf\u4e0e\u5706\u7684\u4ea4\u70b9\u96c6(nil,\u4e00\u4e2a\u70b9\u6216\u8005\u4e24\u4e2a\u70b9)        ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Inters_Circle_Line (Cen rad PtA PtB \/ p d L A eps)<br \/>\n  (setq eps 1e-6)<br \/>\n  (setq p (Line:Perpendicular_Foot Cen PtA PtB))        ;\u5706\u5fc3\u5230\u76f4\u7ebf\u7684\u5782\u8db3<br \/>\n  (setq d (abs (car p)))                                ;\u5782\u8ddd<br \/>\n  (setq p (cadr p))                                     ;\u5782\u8db3<br \/>\n  (if (equal d Rad eps)                                 ;\u5982\u679c\u5782\u8ddd\u7b49\u4e8e\u534a\u5f84<br \/>\n    (list p)                                            ;\u76f8\u5207<br \/>\n    (if (&lt; d Rad)                                       ;\u5982\u679c\u5782\u8ddd\u5c0f\u4e8e\u534a\u5f84<br \/>\n      (progn<br \/>\n        (setq L (sqrt (* (+ Rad d)(- Rad d))))          ;\u534a\u5f26\u957f<br \/>\n        (setq A (angle PtA PtB))                        ;\u76f4\u7ebf\u7684\u4e0eX\u8f74\u7ebf\u7684\u4ea4\u89d2<br \/>\n        (list (polar p a (- L)) (polar p a L))          ;\u6709\u4e24\u4e2a\u4ea4\u70b9<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u76f4\u7ebf\u548c\u5706\u7684\u4ea4\u70b9\u5417\uff0c\u4e3aCIR:LCR\u76f8\u5207\u5706\u4fee\u6539               ;<br \/>\n;;;\u8f93\u5165\uff1a\u5706\u5fc3\uff0c\u534a\u5f84\uff0c\u89d2\u5ea6\u65b9\u5411\uff0c\u4e0e\u5706\u5fc3\u7684\u8ddd\u79bb            ;<br \/>\n;;;\u8f93\u51fa\uff1a\u76f4\u7ebf\u4e0e\u5706\u7684\u4ea4\u70b9\u96c6(nil,\u4e00\u4e2a\u70b9\u6216\u8005\u4e24\u4e2a\u70b9)        ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Inters_Circle_Line_1 (cen rad An Dist \/ d p l s)<br \/>\n  (setq d (abs dist))<br \/>\n  (if (equal d Rad 1e-6)<br \/>\n    (list (polar cen (- an (* pi 0.5)) Dist))           ;\u76f8\u5207<br \/>\n    (if (&lt; d Rad)<br \/>\n      (setq p (polar cen (- an (* pi 0.5)) Dist)        ;\u5782\u8db3<br \/>\n            L (sqrt (* (+ rad d)(- rad d)))             ;\u534a\u5f26\u957f<br \/>\n            S (list (polar p an (- L))<br \/>\n                    (polar p an L)<br \/>\n              )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5706\u548c\u5706\u7684\u4ea4\u70b9                                        ;<br \/>\n;;;\u8f93\u5165\uff1a\u4e24\u4e2a\u5706\uff08\u7528\u5706\u5fc3\u548c\u534a\u5f84\u8868\u793a\uff09                    ;<br \/>\n;;;\u8f93\u51fa\uff1a\u4e24\u4e2a\u5706\u7684\u4ea4\u96c6\uff08nil\uff0c\u4e00\u4e2a\u70b9\u6216\u8005\u4e24\u4e2a\u70b9\uff09         ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Inters_Circle_Circle (c1 r1 c2 r2 \/ eps m n L d H A B)<br \/>\n  (setq eps 1e-6)<br \/>\n  (setq m (+ r2 r1))<br \/>\n  (setq n (- r2 r1))<br \/>\n  (setq L (distance c1 c2))<br \/>\n  (cond<br \/>\n    ( (equal L 0 eps) nil)                              ;\u5706\u5fc3\u91cd\u5408\uff0c\u65e0\u89e3\u6216\u65e0\u7a77\u89e3<br \/>\n    ( (equal m l eps)                                   ;\u4e24\u4e2a\u5706\u5916\u5207<br \/>\n      (list (polar c1 (angle c1 c2) r1))<br \/>\n    )<br \/>\n    ( (equal (abs n) l eps)                             ;\u5185\u5207<br \/>\n      (if (&lt; n 0)<br \/>\n        (list (polar C2 (angle c2 c1) (- r2)))<br \/>\n        (list (polar C2 (angle c2 c1) r2))<br \/>\n      )<br \/>\n    )<br \/>\n    ( (and (&gt; m L) (&lt; (abs n) L))                       ;\u76f8\u4ea4<br \/>\n      (setq d (+ (* r1 r1) (* (+ L r2) (- L r2))))      ;\u6839\u636e\u4f59\u5f26\u5b9a\u7406<br \/>\n      (setq d (\/ d (+ L L)))<br \/>\n      (setq H (sqrt (* (+ r1 d) (- r1 d))))             ;\u4ea4\u70b9\u4e0e\u5706\u5fc3\u8fde\u7ebf\u5782\u76f4\u8ddd\u79bb<br \/>\n      (setq A (angle c1 c2))                            ;\u5706\u5fc3\u8fde\u7ebf\u89d2<br \/>\n      (setq B (atan h d))<br \/>\n      (list (polar c1 (- A B) r1)                       ;\u6709\u4e24\u4e2a\u4ea4\u70b9<br \/>\n            (polar c1 (+ A B) r1)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5706\u5916\u7684\u4e00\u70b9\u5bf9\u5706\u5f62\u7684\u5207\u70b9                              ;<br \/>\n;;;\u8f93\u5165: \u7ed9\u5b9a\u5706\u7684\u5706\u5fc3\u548c\u534a\u5f84\u548c\u5706\u5916\u7684\u4e00\u70b9Pt              ;<br \/>\n;;;\u8f93\u51fa: \u8fd9\u70b9Pt\u5bf9\u5706\u7684\u5207\u70b9\u96c6(nil\uff0c\u4e00\u4e2a\u6216\u8005\u4e24\u4e2a)         ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Point_Tangent (cen rad pt \/ d l a b p q r eps)<br \/>\n  (setq eps 1e-8)<br \/>\n  (setq d (distance cen pt))<br \/>\n  (if (equal d rad eps)<br \/>\n    (list pt)<br \/>\n    (if (&gt; d rad)<br \/>\n      (setq l (sqrt (* (+ d rad) (- d rad)))<br \/>\n            a (atan l rad)<br \/>\n            b (angle cen pt)<br \/>\n            p (polar cen (+ b a) rad)<br \/>\n            q (polar cen (- b a) rad)<br \/>\n            r (list p q)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u4e24\u4e2a\u5706\u7684\u516c\u5207\u7ebf                                      ;<br \/>\n;;;\u8f93\u5165: \u7ed9\u5b9a\u4e24\u4e2a\u5706\u7684\u5706\u5fc3\u548c\u534a\u5f84                        ;<br \/>\n;;;\u8f93\u51fa: \u8fd9\u4e24\u4e2a\u5706\u7684\u516c\u5207\u7ebf(nil\uff0c\u4e00\u4e2a\u70b9\u6216\u8005\u70b9\u5bf9\u96c6\u5408)     ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Common_Tangent (c1 r1 c2 r2 \/ a b d eps p q m n u v ret L)<br \/>\n  (setq d (distance c1 c2))<br \/>\n  (setq a (angle c1 c2))<br \/>\n  (setq eps 1e-8)<br \/>\n  (cond<br \/>\n    ( (equal d 0 eps) nil)                              ;\u5706\u5fc3\u91cd\u5408\uff0c\u65e0\u89e3\u6216\u8005\u65e0\u7a77\u89e3<br \/>\n    ( (equal d (abs (setq b (- r1 r2))) eps)            ;\u5185\u5207<br \/>\n      (setq p (polar c1 a (Math:Sign_reversal r1 b)))   ;\u5207\u70b9<br \/>\n      (list (list p (polar p (+ a (* pi 0.5)) 1000)))   ;\u5185\u5207\u7ebf<br \/>\n    )<br \/>\n    ( (&gt; d b)<br \/>\n      (foreach r (list b (+ r1 r2))                     ;\u8003\u8651\u5185\u5916\u516c\u5207\u4e24\u79cd\u60c5\u51b5<br \/>\n        (setq l (* (+ d r) (- d r)))<br \/>\n        (cond<br \/>\n          ( (equal l 0 eps)                             ;\u4e24\u4e2a\u5706\u5916\u5207<br \/>\n            (setq p (polar c1 a r1))<br \/>\n            (setq q (polar p (+ a (* pi 0.5)) 1000))<br \/>\n            (setq ret (cons (list p q) ret))<br \/>\n          )<br \/>\n          ( (&gt; l 0)<br \/>\n            (setq u (atan (sqrt l) r))<br \/>\n            (setq v (- a u))<br \/>\n            (setq u (+ a u))<br \/>\n            (setq p (polar C1 u r1))<br \/>\n            (setq q (polar C1 v r1))<br \/>\n            (if (eq r b)<br \/>\n              (setq m (polar c2 u r2)                   ;\u5916\u516c\u5207\u7ebf<br \/>\n                    n (polar c2 v r2)<br \/>\n              )<br \/>\n              (setq m (polar c2 u (- r2))               ;\u5185\u516c\u5207\u7ebf<br \/>\n                    n (polar c2 v (- r2))<br \/>\n              )<br \/>\n            )<br \/>\n            (setq ret (cons (list p m) ret))<br \/>\n            (setq ret (cons (list q n) ret))<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n      Ret<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u4f5c\u7ed9\u5b9a\u534a\u5f84\u5e76\u7ecf\u8fc7\u4e24\u70b9\u7684\u5706                            ;<br \/>\n;;;\u8f93\u5165: \u4e0d\u91cd\u5408\u7684\u4e24\u70b9\u548c\u534a\u5f84                            ;<br \/>\n;;;\u8f93\u51fa: \u65e0\u89e3\u6216\u65e0\u7a77\u89e3\u4e3anil,\u5426\u5219\u7528\u4e2d\u5fc3\u534a\u5f84\u8868\u793a\u7684\u5706\u7684\u5217\u8868;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PPR (P1 P2 R \/ D M H A eps)<br \/>\n  (setq eps 1e-6)<br \/>\n  (setq M (GEO:Midpoint P1 P2))<br \/>\n  (setq D (distance P1 M))<br \/>\n  (cond<br \/>\n    ( (equal D 0 eps) nil)                              ;\u4e24\u70b9\u91cd\u5408\uff0c\u65e0\u7a77\u89e3<br \/>\n    ( (equal D R eps)                                   ;\u4e24\u70b9\u4e3a\u76f4\u5f84\u7684\u4e24\u4e2a\u7aef\u70b9<br \/>\n      (list (list M R))<br \/>\n    )<br \/>\n    ( (&gt; R D)                                           ;\u6ee1\u8db3\u4e24\u70b9\u8ddd\u79bb\u5c0f\u4e8e\u7ed9\u5b9a\u76f4\u5f84<br \/>\n      (setq H (sqrt (* (+ R D) (- R D))))<br \/>\n      (setq A (+ (angle P1 P2) (* pi 0.5)))<br \/>\n      (list (list (polar M A H) R)                      ;\u6709\u4e24\u89e3<br \/>\n            (list (polar M A (- H)) R)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u7ecf\u8fc7\u4e00\u70b9\u548c\u4e00\u76f4\u7ebf\u76f8\u5207\u7684\u5177\u6709\u7ed9\u5b9a\u534a\u5f84\u7684\u5706              ;<br \/>\n;;;\u8f93\u5165: \u70b9\u548c\u76f4\u7ebf\u7684\u4e24\u4e2a\u7aef\u70b9\u4ee5\u53ca\u7ed9\u5b9a\u7684\u534a\u5f84              ;<br \/>\n;;;\u8f93\u51fa: \u65e0\u89e3\u6216\u65e0\u7a77\u89e3\u4e3anil,\u5426\u5219\u7528\u4e2d\u5fc3\u534a\u5f84\u8868\u793a\u7684\u5706\u7684\u5217\u8868;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PLR (Pt0 PtA PtB Rad \/ H P D A B X Y eps)<br \/>\n  (setq eps 1e-6)<br \/>\n  (setq P (Line:Perpendicular_Foot Pt0 PtA PtB))<br \/>\n  (setq H (abs (car P)))<br \/>\n  (setq P (cadr P))<br \/>\n  (setq D (+ Rad Rad))<br \/>\n  (cond<br \/>\n    ( (equal H D eps)<br \/>\n      (list (list (GEO:Midpoint  Pt0 P) Rad))<br \/>\n    )<br \/>\n    ( (equal H 0 eps)<br \/>\n      (setq A (+ (angle PtA PtB) (\/ pi 2)))<br \/>\n      (list<br \/>\n        (list (polar Pt0 A Rad) Rad)<br \/>\n        (list (polar Pt0 A (- Rad)) Rad)<br \/>\n      )<br \/>\n    )<br \/>\n    ( (&lt; H D)<br \/>\n      (setq Y (- H Rad))<br \/>\n      (setq X (sqrt (* (+ Rad Y) (- Rad Y))))<br \/>\n      (setq B (atan X Y))<br \/>\n      (setq A (angle Pt0 P))<br \/>\n      (list<br \/>\n        (list (polar Pt0 (+ A B) Rad) Rad)<br \/>\n        (list (polar Pt0 (- A B) Rad) Rad)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u548c\u4e24\u76f4\u7ebf\u76f8\u5207\u7684\u5177\u6709\u7ed9\u5b9a\u534a\u5f84\u7684\u5706(\u4e00\u822c\u6765\u8bf4\u662f\u4e24\u76f8\u4ea4\u76f4\u7ebf);<br \/>\n;;;\u8f93\u5165: \u4e24\u76f4\u7ebf\u7684\u56db\u4e2a\u7aef\u70b9\u4ee5\u53ca\u7ed9\u5b9a\u7684\u534a\u5f84                ;<br \/>\n;;;\u8f93\u51fa: \u65e0\u89e3\u6216\u65e0\u7a77\u89e3\u4e3anil,\u5426\u5219\u7528\u4e2d\u5fc3\u534a\u5f84\u8868\u793a\u7684\u5706\u7684\u5217\u8868;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:LLR (PtA PtB PtC PtD Rad \/ a1 a2 a3 a4 a5 L1 L2 Int)<br \/>\n  (setq int (inters PtA PtB PtC PtD nil))<br \/>\n  (if int<br \/>\n    (progn<br \/>\n      (setq a1 (angle pta ptb))<br \/>\n      (setq a2 (angle ptc ptd))<br \/>\n      (setq a3 (* (+ a1 a2) 0.5))<br \/>\n      (setq a4 (* (- a1 a2) 0.5))<br \/>\n      (setq a5 (+ a3 (* pi 0.5)))<br \/>\n      (setq L1 (\/ Rad (sin a4)))<br \/>\n      (setq L2 (\/ Rad (cos a4)))<br \/>\n      (list<br \/>\n        (list (polar int a3 L1) Rad)<br \/>\n        (list (polar int a3 (- L1)) Rad)<br \/>\n        (list (polar int a5 L2) Rad)<br \/>\n        (list (polar int a5 (- L2)) Rad)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u548c\u4e00\u76f4\u7ebf\u53ca\u4e00\u5b9a\u5706\u76f8\u5207\u7684\u5177\u6709\u7ed9\u5b9a\u534a\u5f84\u7684\u5706              ;<br \/>\n;;;\u8f93\u5165: \u76f4\u7ebf\u7684\u4e24\u4e2a\u7aef\u70b9\uff0c\u5706\u7684\u5706\u5fc3\u548c\u534a\u5f84\u4ee5\u53ca\u7ed9\u5b9a\u7684\u534a\u5f84  ;<br \/>\n;;;\u8f93\u51fa: \u65e0\u89e3\u6216\u65e0\u7a77\u89e3\u4e3anil,\u5426\u5219\u7528\u4e2d\u5fc3\u534a\u5f84\u8868\u793a\u7684\u5706\u7684\u5217\u8868;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:LCR (PtA PtB C0 R0 R1 \/ d a ret)<br \/>\n  (setq d (Line:Perpendicular_Distance C0 PtA PtB))<br \/>\n  (setq A (angle PtA PtB))<br \/>\n  (foreach h (list (+ d r1) (- d r1))<br \/>\n    (foreach r (list (+ r0 r1) (abs (- r0 r1)))<br \/>\n      (foreach p (CIR:Inters_Circle_Line_1 C0 R A h)<br \/>\n        (setq ret (cons (list p r1) ret))<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n  (reverse ret)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u4e0e\u4e24\u4e2a\u5706\u76f8\u5207\u7684\u5177\u6709\u7ed9\u5b9a\u534a\u5f84\u7684\u5706                      ;<br \/>\n;;;\u8f93\u5165: \u4e24\u4e2a\u5706\u7684\u5706\u5fc3\u548c\u534a\u5f84\u4ee5\u53ca\u7ed9\u5b9a\u7684\u534a\u5f84              ;<br \/>\n;;;\u8f93\u51fa: \u65e0\u89e3\u6216\u65e0\u7a77\u89e3\u4e3anil,\u5426\u5219\u7528\u4e2d\u5fc3\u534a\u5f84\u8868\u793a\u7684\u5706\u7684\u5217\u8868;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:CCR (C1 R1 C2 R2 R0 \/ ret)<br \/>\n  (foreach R (list (cons (+ R1 R0) (+ R2 R0))<br \/>\n                   (cons (+ R1 R0) (abs (- R2 R0)))<br \/>\n                   (cons (abs (- R1 R0)) (+ R2 R0))<br \/>\n                   (cons (abs (- R1 R0)) (abs (- R2 R0)))<br \/>\n             )<br \/>\n    (foreach p (CIR:Inters_Circle_Circle C1 (car R) C2 (cdr R))<br \/>\n      (setq ret (cons (list p R0) Ret))<br \/>\n    )<br \/>\n  )<br \/>\n  ret<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u901a\u8fc7\u4e00\u5b9a\u70b9\u548c\u4e00\u5b9a\u5706\u76f8\u5207\u7684\u5177\u6709\u7ed9\u5b9a\u534a\u5f84\u7684\u5706            ;<br \/>\n;;;\u8f93\u5165: \u70b9\uff0c\u5706\u7684\u5706\u5fc3\u548c\u534a\u5f84\u4ee5\u53ca\u7ed9\u5b9a\u7684\u534a\u5f84              ;<br \/>\n;;;\u8f93\u51fa: \u65e0\u89e3\u6216\u65e0\u7a77\u89e3\u4e3anil,\u5426\u5219\u7528\u4e2d\u5fc3\u534a\u5f84\u8868\u793a\u7684\u5706\u7684\u5217\u8868;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PCR (P0 C0 R0 R1 \/ ret)<br \/>\n  (foreach r (list (+ r0 r1) (abs (- r0 r1)))<br \/>\n    (foreach p (CIR:Inters_Circle_Circle p0 r1 c0 r)<br \/>\n      (setq ret (cons (list p R1) ret))<br \/>\n    )<br \/>\n  )<br \/>\n  ret<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u6c42\u4e09\u89d2\u5f62\u5916\u5fc3   TRI:CircumCenter\uff0cOr Called ExCenter ;<br \/>\n;;;\u5c3d\u7ba1\u8fd9\u6837\u5199\u5f88\u9ebb\u70e6\uff0c\u663e\u5f97\u4ee3\u7801\u5f88\u591a\uff0c\u4f46\u8fd0\u884c\u5374\u5f88\u5feb        ;<br \/>\n;;;\u8f93\u5165: \u7ed9\u5b9a\u4e0d\u5171\u7ebf\u7684\u4e09\u4e2a\u70b9                            ;<br \/>\n;;;\u8f93\u51fa: \u4e09\u70b9\u7684\u5916\u63a5\u5706(\u5706\u5fc3\u548c\u534a\u5f84\u8868\u793a),nil\u8868\u793a\u4e09\u70b9\u5171\u7ebf  ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PPP (P0 P1 P2 \/ X0 Y0 X1 Y1 X2 Y2 DX1 DY1 DX2 DY2 D 2D C1 C2 CE)<br \/>\n  (setq X0  (car  P0)<br \/>\n        Y0  (cadr P0)<br \/>\n        X1  (car  P1)<br \/>\n        Y1  (cadr P1)<br \/>\n        X2  (car  P2)<br \/>\n        Y2  (cadr P2)<br \/>\n        DX1 (- X1 X0)<br \/>\n        DY1 (- Y1 Y0)<br \/>\n        DX2 (- X2 X0)<br \/>\n        DY2 (- Y2 Y0)<br \/>\n  )<br \/>\n  (setq D (- (* DX1 DY2) (* DX2 DY1)))<br \/>\n  (if (equal D 0 1e-14)<br \/>\n    nil<br \/>\n    (progn<br \/>\n      (setq 2D (+ D D)<br \/>\n            C1 (+ (* DX1 (+ X0 X1)) (* DY1 (+ Y0 Y1)))<br \/>\n            C2 (+ (* DX2 (+ X0 X2)) (* DY2 (+ Y0 Y2)))<br \/>\n            CE (List (\/ (- (* C1 DY2) (* C2 DY1)) 2D)<br \/>\n                     (\/ (- (* C2 DX1) (* C1 DX2)) 2D)<br \/>\n               )<br \/>\n      )<br \/>\n      (list CE (distance CE P0))<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u4e09\u89d2\u5f62\u5185\u5fc3  Tri:InCenter                            ;<br \/>\n;;;(aX1+bx2+cx3)\/(a+b+c)  (aY2+bY2+CY3)\/(a+b+c)        ;<br \/>\n;;;\u8f93\u5165: \u7ed9\u5b9a\u4e09\u4e2a\u70b9                                    ;<br \/>\n;;;\u8f93\u51fa: \u4e09\u70b9\u7684\u5185\u5207\u5706(\u5706\u5fc3\u548c\u534a\u5f84\u8868\u793a)                  ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun Tri:InCenter (pa pb pc \/ a b c L I r)<br \/>\n  (setq a (distance pb pc))<br \/>\n  (setq b (distance pc pa))<br \/>\n  (setq c (distance pa pb))<br \/>\n  (setq L (+ a b c))<br \/>\n  (if (\/= L 0.0)<br \/>\n    (setq I (MAT:SxVs (list pa pb pc) (list (\/ a L) (\/ b L) (\/ c L)))<br \/>\n          R (list I (abs (Line:Perpendicular_Distance I pa pb)))<br \/>\n    )<br \/>\n    (list pa 0)<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u8ddf\u4e09\u6761\u76f4\u7ebf\u76f8\u5207\u7684\u5706\u5f62                                ;<br \/>\n;;;\u8f93\u5165: \u7ed9\u5b9a\u4e09\u6761\u76f4\u7ebf                                  ;<br \/>\n;;;\u8f93\u51fa: \u4e0e\u8fd9\u4e09\u6761\u76f4\u7ebf\u90fd\u76f8\u5207\u7684\u5706\uff08\u5185\u5207\u5706\u548c\u65c1\u5207\u5706\uff09      ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:LLL (P1a P1b P2a P2b P3a P3b \/ bs1 bs2 ret int rad)<br \/>\n  (setq bs1 (LINE:Angular_Bisector P1a p1b p2a p2b))                    ;\u89d2\u5e73\u5206\u7ebf1<br \/>\n  (setq bs2 (LINE:Angular_Bisector P2a p2b p3a p3b))                    ;\u89d2\u5e73\u5206\u7ebf2<br \/>\n  (foreach p bs1<br \/>\n    (foreach q bs2<br \/>\n      (if (setq int (inters (car p) (cadr p) (car q) (cadr q) nil))     ;\u5982\u679c\u89d2\u5e73\u5206\u7ebf\u76f8\u4ea4<br \/>\n        (setq rad (LINE:Perpendicular_Distance int p1a p1b)             ;\u6c42\u51fa\u4ea4\u70b9\u5230\u4efb\u610f\u7ebf\u6bb5\u8ddd\u79bb\u5373\u534a\u5f84<br \/>\n              ret (cons (list int (abs rad)) ret)                       ;\u52a0\u5165\u5230\u89e3\u96c6\u4e2d<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n  ret<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u70b9\u70b9\u5207\u7ebf\u5706,\u6c42\u901a\u8fc7\u4e24\u5b9a\u70b9\uff0c\u548c\u4e00\u76f4\u7ebf\u76f8\u5207\u7684\u5706           ;<br \/>\n;;;\u8f93\u5165: P1,P2,\u901a\u8fc7\u7684\u70b9,PA,PB\u76f4\u7ebf\u4e0a\u7684\u4e24\u70b9\u3002            ;<br \/>\n;;;\u8f93\u51fa: \u7b26\u5408\u6761\u4ef6\u7684\u5706\u7684\u96c6\u5408(nil\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u5706\u7684\u96c6\u5408)   ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PPL (P1 P2 PA PB \/ AN D1 D2 P3 DD INT C1 C2 L1 L2 Mid NRM T1 T2 RT eps)<br \/>\n  (setq eps 1e-6)<br \/>\n  (if (and (not (equal p1 p2 eps)) (Line:IsSameSide P1 P2 PA PB))       ;\u540c\u4fa7\u4e14\u4e0d\u91cd\u5408<br \/>\n    (progn<br \/>\n      (setq int (inters p1 p2 pa pb nil))<br \/>\n      (setq nrm (MAT:Rot90 (mapcar &#8216;- pa pb)))                          ;\u5782\u76f4PAPB\u7684\u77e2\u91cf<br \/>\n      (setq Mid (GEO:Midpoint p1 p2))                                   ;P1P2\u7684\u4e2d\u70b9<br \/>\n      (if int<br \/>\n        (progn<br \/>\n          (setq l1 (distance int p1))<br \/>\n          (setq l2 (distance int p2))<br \/>\n          (setq P3 (GEO:Rot90 Mid p1 p2))<br \/>\n          (if (or (equal int p1 eps) (equal int p2 eps))                ;\u5982\u679cP1\u6216P2\u8ddf\u4ea4\u70b9\u91cd\u5408\u5219\u4ea4\u70b9\u4e3a\u5207\u70b9<br \/>\n            (setq C1 (inters Mid P3 int (mapcar &#8216;+ int nrm) nil)        ;\u4e24\u70b9\u7684\u5782\u76f4\u5e73\u5206\u7ebf\u8ddf\u4ea4\u70b9\u5904\u7684\u5782\u7ebf\u7684\u4ea4\u70b9<br \/>\n                  RT (list (list C1 (distance C1 P1)))                  ;\u4e3a\u5706\u5fc3\uff0c\u534a\u5f84\u81ea\u7136\u786e\u5b9a\u4e86\u3002<br \/>\n            )<br \/>\n            (setq an (angle pA pB)<br \/>\n                  dd (sqrt (* l1 l2))                                   ;\u5229\u7528\u5272\u5f26\u5b9a\u7406\u5f97\u5230\u4ea4\u70b9\u5230\u5207\u70b9\u8ddd\u79bb<br \/>\n                  t1 (polar int an dd)                                  ;\u5207\u70b91<br \/>\n                  t2 (polar int an (- dd))                              ;\u5207\u70b92<br \/>\n                  C1 (inters Mid P3 t1 (mapcar &#8216;+ t1 nrm) nil)          ;\u4e24\u70b9\u7684\u5782\u76f4\u5e73\u5206\u7ebf\u8ddf\u8fc7\u5207\u70b91\u7684\u5782\u7ebf\u7684\u4ea4\u70b9<br \/>\n                  C2 (inters Mid P3 t2 (mapcar &#8216;+ t2 nrm) nil)          ;\u4e24\u70b9\u7684\u5782\u76f4\u5e73\u5206\u7ebf\u8ddf\u8fc7\u5207\u70b92\u7684\u5782\u7ebf\u7684\u4ea4\u70b9<br \/>\n                  RT (list (list C1 (distance C1 P1))                   ;\u753b\u57061<br \/>\n                           (list C2 (distance C2 P2))                   ;\u753b\u57062<br \/>\n                     )<br \/>\n            )<br \/>\n          )<br \/>\n        )<br \/>\n        (if (setq t1 (inters Mid (mapcar &#8216;+ Mid nrm) PA PB nil))        ;\u4e24\u70b9\u8ddf\u76f4\u7ebf\u5e73\u884c\u7684\u60c5\u51b5<br \/>\n          (list (CIR:PPP p1 p2 t1))<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u70b9\u7ebf\u7ebf\u5207\u5706\uff0c\u6c42\u901a\u8fc7\u67d0\u5b9a\u70b9\u5e76\u4e0e\u4e24\u6761\u76f4\u7ebf\u76f8\u5207\u7684\u5706        ;<br \/>\n;;;\u8f93\u5165: P,\u901a\u8fc7\u7684\u70b9,PA,PB,PC,PD\u4e24\u76f4\u7ebf\u4e0a\u7684\u56db\u4e2a\u7aef\u70b9\u3002    ;<br \/>\n;;;\u8f93\u51fa: \u7b26\u5408\u6761\u4ef6\u7684\u5706\u7684\u96c6\u5408(nil\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u5706\u7684\u96c6\u5408)   ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PLL-1 (p pA pB Int \/ H L X r1 r2 an)         ;\u7279\u6b8a\u60c5\u51b5\u4e0b\u7684\u5904\u7406P\u70b9\u5728\u89d2\u5e73\u5206\u7ebf\u4e0a<br \/>\n  (setq H (Line:Perpendicular_Distance p PA PB))<br \/>\n  (setq H (abs H))<br \/>\n  (setq L (distance p Int))<br \/>\n  (setq X (* H L))<br \/>\n  (setq r1 (\/ X (+ L H)))<br \/>\n  (setq r2 (\/ X (- L H)))<br \/>\n  (setq an (angle P int))<br \/>\n  (list (list (polar P an r1) r1)<br \/>\n        (list (polar p an (- r2)) r2)<br \/>\n  )<br \/>\n)<br \/>\n(defun CIR:PLL (P pA pB pC pD \/ A A1 A2 D D1 D2 EPS H INT L P1 P2 PM R)<br \/>\n  (setq eps 1e-6)<br \/>\n  (if (setq int (inters pA pB pC pD nil))               ;\u5224\u65ad\u4e24\u76f4\u7ebf\u662f\u5426\u76f8\u4ea4<br \/>\n    (if (equal int P eps)                               ;\u5982\u679c\u4ea4\u70b9\u8ddf\u5b9a\u70b9\u91cd\u5408<br \/>\n      (list (list int 0))                               ;\u89c6\u4f5c\u534a\u5f84\u4e3a0<br \/>\n      (progn<br \/>\n        (if (equal int PA eps) (setq p1 PA PA PB PB P1))<br \/>\n        (if (equal int PC eps) (setq p2 PC PC PD PD P2))<br \/>\n        (setq D1 (Line:Perpendicular_Distance p int PA));\u5b9a\u70b9\u5230\u76f4\u7ebf1\u8ddd\u79bb<br \/>\n        (setq D2 (Line:Perpendicular_Distance p int PC));\u5b9a\u70b9\u5230\u76f4\u7ebf2\u8ddd\u79bb<br \/>\n        (setq a1 (angle int PA))<br \/>\n        (setq a2 (angle int PC))<br \/>\n        (setq a1 (* (+ a1 a2) 0.5))                     ;\u5185\u89d2\u5e73\u5206\u7ebf<br \/>\n        (setq a2 (+ a1 (* pi 0.5)))                     ;\u5916\u89d2\u5e73\u5206\u7ebf<br \/>\n        (setq p1 (GEO:Mirror2D P int a1))               ;\u5bf9\u5185\u89d2\u5e73\u5206\u7ebf\u7684\u955c\u50cf\u70b9<br \/>\n        (setq p2 (GEO:Mirror2D P int a2))               ;\u5bf9\u5916\u89d2\u5e73\u5206\u7ebf\u7684\u955c\u50cf\u70b9<br \/>\n        (if (or (equal p1 P eps) (equal p2 P eps))      ;\u5982\u679c\u8ddf\u89d2\u5e73\u5206\u7ebf\u91cd\u5408<br \/>\n          (CIR:PLL-1 p pA pB Int)                       ;\u6309\u7279\u6b8a\u60c5\u51b5\u5904\u7406<br \/>\n          (if (or (equal d1 0 eps) (equal d2 0 eps))    ;\u5982\u679c\u5b9a\u70b9\u5728\u4e00\u6761\u76f4\u7ebf\u4e0a<br \/>\n            (append                                     ;\u5219\u5185\u5916\u89d2\u5e73\u5206\u7ebf\u90fd\u8981\u8003\u8651<br \/>\n              (CIR:PPL P p1 PA PB)<br \/>\n              (CIR:PPL P p2 PA PB)<br \/>\n            )<br \/>\n            (if (MATH:Same_Sign d1 d2)                  ;\u5269\u4e0b\u7684\u8f6c\u5316\u4e3aCIR:PPL\u95ee\u9898<br \/>\n              (CIR:PPL P p2 PA PB)                      ;\u540c\u53f7\u662f\u5916\u89d2\u5e73\u5206\u7ebf\u7684\u955c\u50cf\u70b9<br \/>\n              (CIR:PPL P p1 PA PB)                      ;\u5f02\u53f7\u662f\u5185\u89d2\u5e73\u5206\u7ebf\u7684\u955c\u50cf\u70b9<br \/>\n            )<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n    (progn                                              ;\u4ee5\u4e0b\u662f\u4e3a\u5e73\u884c\u7684\u4e24\u76f4\u7ebf\u8003\u8651<br \/>\n      (setq D1 (Line:Perpendicular_Foot p PA PB))       ;\u5b9a\u70b9\u5230\u76f4\u7ebf\u7684\u8ddd\u79bb<br \/>\n      (setq D2 (Line:Perpendicular_Foot p PC PD))       ;\u5b9a\u70b9\u5230\u76f4\u7ebf\u7684\u8ddd\u79bb<br \/>\n      (setq D  (Line:Perpendicular_Distance PA PC PD))  ;\u4e24\u5e73\u884c\u76f4\u7ebf\u7684\u8ddd\u79bb<br \/>\n      (setq D  (abs D))<br \/>\n      (setq P1 (cadr D1))<br \/>\n      (setq P2 (cadr D2))<br \/>\n      (setq D1 (abs (car D1)))<br \/>\n      (setq D2 (abs (car D2)))<br \/>\n      (setq pM (GEO:Midpoint P1 P2))                    ;\u4e24\u5782\u8db3\u7684\u4e2d\u70b9<br \/>\n      (cond<br \/>\n        ( (or (equal D1 0 eps) (equal D2 0 eps))        ;\u5982\u679c\u5b9a\u70b9\u5728\u67d0\u4e00\u76f4\u7ebf\u4e0a<br \/>\n          (list (list PM (* D 0.5)))                    ;\u4e24\u5782\u8db3\u7684\u4e2d\u70b9\u662f\u5706\u5fc3<br \/>\n        )<br \/>\n        ( (equal D (+ d1 d2) eps)                       ;\u5b9a\u70b9\u53ea\u6709\u5728\u4e24\u6761\u76f4\u7ebf\u4e4b\u95f4\u624d\u6709\u89e3<br \/>\n          (setq R (* D 0.5))                            ;\u534a\u5f84\u662f\u4e24\u5e73\u884c\u76f4\u7ebf\u8ddd\u79bb\u7684\u4e00\u534a<br \/>\n          (setq H (- d1 R))<br \/>\n          (setq L (sqrt (- (* R R) (* H H))))<br \/>\n          (setq A (angle PA PB))<br \/>\n          (list (list (polar PM A L) R)                 ;\u6b64\u65f6\u6709\u4e24\u4e2a\u89e3<br \/>\n                (list (polar pM A (- L)) R)<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u70b9\u70b9\u5207\u7684\u5706(\u6c42\u901a\u8fc7\u4e24\u4e0d\u76f8\u540c\u7684\u70b9\u5e76\u4e0e\u4e00\u4e2a\u5706\u76f8\u5207\u7684\u5706)    ;<br \/>\n;;;\u8f93\u5165: \u4e24\u5b9a\u70b9\u548c\u7ed9\u5b9a\u7684\u4e00\u4e2a\u5706\u7684\u5706\u5fc3\u53ca\u534a\u5f84              ;<br \/>\n;;;\u8f93\u51fa: \u7b26\u5408\u6761\u4ef6\u7684\u5706\u7684\u96c6\u5408(nil\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u5706\u7684\u96c6\u5408)   ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PPC (p1 p2 cen rad \/ PA PB pC PD PM RT an d1 d2 dd eps)<br \/>\n  (setq eps 1e-6)<br \/>\n  (setq dd (distance p1 p2))<br \/>\n  (setq d1 (distance cen p1))<br \/>\n  (setq d2 (distance cen p2))<br \/>\n  (setq pM (GEO:Midpoint  p1 p2))<br \/>\n  (setq an (+ (angle p1 p2) (\/ pi 2)))<br \/>\n  (cond<br \/>\n    ( (equal dd 0 eps) nil)<br \/>\n    ( (or (equal d1 rad eps) (equal d2 rad eps))<br \/>\n      (if (equal d1 rad eps)<br \/>\n        (setq PA p1 PB p2)<br \/>\n        (setq PA p2 PB p1)<br \/>\n      )<br \/>\n      (setq pC (polar PM an rad))<br \/>\n      (setq pD (inters pM PC PA CEN nil))<br \/>\n      (if PD<br \/>\n        (list (list pD (distance pD p1)))<br \/>\n      )<br \/>\n    )<br \/>\n    ( (equal d1 d2 eps)<br \/>\n      (setq pA (polar cen an rad))<br \/>\n      (setq pB (polar cen an (- rad)))<br \/>\n      (foreach p (list PA PB)<br \/>\n        (setq rt (cons (CIR:PPP p1 p2 p) rt))<br \/>\n      )<br \/>\n    )<br \/>\n    ( (Cir:Is_Same_Side rad d1 d2)<br \/>\n      (setq pA (CIR:Radical_Axis PM (\/ dd 2) Cen rad))<br \/>\n      (setq PB (polar pA (+ (angle pA cen) (\/ pi 2)) rad))<br \/>\n      (setq pC (inters pA pB p1 p2 nil))<br \/>\n      (foreach p (CIR:Point_Tangent cen rad pC)<br \/>\n        (setq rt (cons (CIR:PPP p1 p2 p) rt))<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<br \/>\n;;;sqrt(((dee\/dee)^2-1)*(dee^2))<br \/>\n;;;sqrt((x^2\/a^2-1)*b^2)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u628a\u70b9\u5706\u5706\u5207\u95ee\u9898\u8f6c\u5316\u4e3a\u70b9\u70b9\u5706\u5207\u95ee\u9898                    ;<br \/>\n;;;Antihomologous Points                               ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PCC-&gt;PPC (pt c1 r1 c2 r2 \/ eps k p q d s)<br \/>\n  (setq eps 1e-8)<br \/>\n  (foreach a (list (+ r1 r2) (- r1 r2))<br \/>\n    (if (equal a 0 eps)                                 ;\u534a\u5f84\u76f8\u7b49\u60c5\u51b5\u4e0b\u4f5c\u955c\u50cf<br \/>\n      (setq p (GEO:Midpoint c1 c2)<br \/>\n            q (GEO:Mirror2D pt p (+ (angle c1 c2) (\/ pi 2)))<br \/>\n            s (cons q s)<br \/>\n      )<br \/>\n      (progn<br \/>\n        (setq p (GEO:Scale c2 c1 (\/ r1 a)))             ;\u5bf9\u4e8e\u5185\u5916\u5207\u7ebf\u4ea4\u70b9\u7684\u6620\u5c04<br \/>\n        (setq d (distance pt p))<br \/>\n        (and (= a (+ r1 r2)) (setq d (- d)))<br \/>\n        (if (equal d 0 eps)<br \/>\n          s<br \/>\n          (setq k (\/ (distance c1 c2) a)<br \/>\n                k (* r1 r2 (1- (* k k)))<br \/>\n                q (polar p (angle p pt) (\/ k d))<br \/>\n                s (cons q s)<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u70b9\u5207\u5207\u7684\u5706(\u6c42\u901a\u8fc7\u4e00\u5b9a\u70b9\u5e76\u4e0e\u4e24\u7ed9\u5b9a\u5706\u76f8\u5207\u7684\u5706)        ;<br \/>\n;;;\u8f93\u5165: \u4e00\u5b9a\u70b9\u548c\u7ed9\u5b9a\u7684\u4e24\u4e2a\u5706\u7684\u5706\u5fc3\u53ca\u534a\u5f84              ;<br \/>\n;;;\u8f93\u51fa: \u7b26\u5408\u6761\u4ef6\u7684\u5706\u7684\u96c6\u5408(nil\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u5706\u7684\u96c6\u5408)   ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PCC (pt Cen1 rad1 Cen2 rad2 \/ HC an c EPS H PM v x y)<br \/>\n  (setq eps 1e-8)<br \/>\n  (setq HC (CIR:PCC-&gt;PPC pt cen1 rad1 cen2 rad2))<br \/>\n  (setq pM (GEO:Midpoint  Cen1 Cen2))<br \/>\n  (foreach p HC<br \/>\n    (if (equal p pt eps)<br \/>\n      (progn<br \/>\n        (setq H (Line:Perpendicular_Distance pt cen1 cen2))<br \/>\n        (setq x (distance cen1 pM))<br \/>\n        (setq x (* x x))<br \/>\n        (setq a (+ (angle cen1 cen2) (\/ pi 2)))<br \/>\n        (foreach k (list (+ H rad1) (- H rad1))<br \/>\n          (if (not (equal k 0 eps))<br \/>\n            (setq y (\/ (- (* K K) x) K 2)<br \/>\n                  c (polar pm a y)<br \/>\n                  v (cons (list c (distance pt c)) v)<br \/>\n            )<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n      (setq v (append (CIR:PPC p pt cen1 rad1) v))<br \/>\n    )<br \/>\n  )<br \/>\n  v<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u70b9\u7ebf\u5706\u5207\u7684\u5706(\u6c42\u901a\u8fc7\u4e00\u5b9a\u70b9\u5e76\u4e0e\u4e00\u76f4\u7ebf\u548c\u4e00\u5706\u90fd\u76f8\u5207\u7684\u5706);<br \/>\n;;;\u8f93\u5165: \u4e00\u5b9a\u70b9\u548c\u76f4\u7ebf\u7684\u4e24\u4e2a\u7aef\u70b9\u7ed9\u5b9a\u7684\u5706\u7684\u5706\u5fc3\u53ca\u534a\u5f84    ;<br \/>\n;;;\u8f93\u51fa: \u7b26\u5408\u6761\u4ef6\u7684\u5706\u7684\u96c6\u5408(nil\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u5706\u7684\u96c6\u5408)   ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PLC_1 (P0 Pa Pb R0 C0 \/ eps f a b c d x y y0 y1 dy k k1 a1 a2 s p)<br \/>\n  (setq eps 1e-8)<br \/>\n  (setq f (Line:Equation Pa Pb))<br \/>\n  (setq A (car f))<br \/>\n  (setq B (cadr f))<br \/>\n  (setq C (caddr f))<br \/>\n  (setq D (sqrt (+ (* A A) (* B B))))<br \/>\n  (setq y0 (\/ (+ (* A (car C0)) (* B (cadr C0)) C) D))<br \/>\n  (setq y1 (\/ (+ (* A (car P0)) (* B (cadr P0)) C) D))<br \/>\n  (setq dy (- y0 y1))<br \/>\n  (setq k1 (- (* dy (+ y0 y1)) (* R0 R0)))<br \/>\n  (setq a1 (angle Pa Pb))<br \/>\n  (setq a2 (+ a1 (* pi 0.5)))<br \/>\n  (setq s nil)<br \/>\n  (foreach R (list R0 (- R0))<br \/>\n    (setq k (+ dy R))<br \/>\n    (setq k (+ k k))<br \/>\n    (if (not (equal k 0 eps))<br \/>\n      (progn<br \/>\n        (setq y (\/ k1 k))<br \/>\n        (setq p (polar C0 a2 (- y y0)))<br \/>\n        (setq x (* y1 (- (+ y y) y1)))<br \/>\n        (cond<br \/>\n          ( (equal x 0 eps)<br \/>\n            (setq s (cons (list p (abs y)) s))<br \/>\n          )<br \/>\n          ( (&gt; x 0)<br \/>\n            (setq x (sqrt x))<br \/>\n            (setq s (cons (list (polar p a1 x) (abs y)) s))<br \/>\n            (setq s (cons (list (polar p a1 (- x)) (abs y)) s))<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n  s<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u70b9\u7ebf\u5706\u5207\u7684\u5706(\u6c42\u901a\u8fc7\u4e00\u5b9a\u70b9\u5e76\u4e0e\u4e00\u76f4\u7ebf\u548c\u4e00\u5706\u90fd\u76f8\u5207\u7684\u5706);<br \/>\n;;;\u8f93\u5165: \u4e00\u5b9a\u70b9\u548c\u76f4\u7ebf\u7684\u4e24\u4e2a\u7aef\u70b9\u7ed9\u5b9a\u7684\u5706\u7684\u5706\u5fc3\u53ca\u534a\u5f84    ;<br \/>\n;;;\u8f93\u51fa: \u7b26\u5408\u6761\u4ef6\u7684\u5706\u7684\u96c6\u5408(nil\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u5706\u7684\u96c6\u5408)   ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PLC (Pt0 PtA PtB Cen Rad \/ v1 v2 P1 P2 PO an q m i c s)<br \/>\n  (setq v1 (mapcar &#8216;- cen Pt0))<br \/>\n  (setq v2 (mapcar &#8216;- PtA ptb))<br \/>\n  (if (equal (MAT:Dot v1 v2) 0 1e-6)<br \/>\n    (CIR:PLC_1 Pt0 PtA PtB Rad Cen)                     ;\u5b9a\u70b9\u5728\u8fc7\u5706\u5fc3\u7684\u5782\u76f4\u76f4\u7ebf\u7684\u7ebf\u4e0a<br \/>\n    (progn<br \/>\n      (setq p1 (CIR:Radical_Axis_Point Cen Rad Pt0))    ;\u7b49\u5e42\u8f74\u7ebf<br \/>\n      (setq p2 (GEO:Rot90 P1 cen Pt0))                  ;\u7b49\u5e42\u8f74\u7ebf\u53e6\u5916\u4e00\u70b9<br \/>\n      (setq pO (inters P1 P2 PtA PtB nil))              ;\u7b49\u5e42\u4e2d\u5fc3<br \/>\n      (setq an (+ (angle PtA PtB) (\/ pi 2)))            ;\u5782\u76f4\u76f4\u7ebf\u7684\u89d2\u5ea6<br \/>\n      (setq p1 (polar cen an rad))                      ;\u5706\u7684\u76f4\u5f84\u7aef\u70b91<br \/>\n      (setq p2 (polar cen an (- rad)))                  ;\u5706\u7684\u76f4\u5f84\u7aef\u70b92<br \/>\n      (foreach p (list p1 p2)                           ;\u5bf9\u6bcf\u4e2a\u76f4\u5f84\u7aef\u70b9<br \/>\n        (setq q (CIR:Polar_Point_1 Cen Rad Pt0 p))      ;\u6c42\u51fa\u5706\u5bf9\u5230\u7aef\u70b9\u548cPt0\u7684\u76f4\u7ebf\u7684\u6781\u70b9<br \/>\n        (foreach n (CIR:Inters_Circle_Line Cen rad pO q);\u5bf9\u6bcf\u4e2a\u6781\u70b9\u548c\u7b49\u5e42\u4e2d\u5fc3\u7684\u76f4\u7ebf\u4e0e\u5706\u7684\u4ea4\u70b9<br \/>\n          (setq m (Geo:MidPoint Pt0 n))                 ;\u4e2d\u70b9<br \/>\n          (setq i (Geo:Rot90 m Pt0 n))                  ;\u5782\u76f4\u5e73\u5206\u7ebf<br \/>\n          (if (setq c (inters m i Cen n nil))           ;\u5982\u679c\u76f8\u4ea4\u5219\u4ea4\u70b9\u662f\u5706\u5fc3<br \/>\n            (setq s (cons (list c (distance c n)) s))   ;\u52a0\u5165\u5230\u89e3\u96c6<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n      s<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5207\u7ebf\u5207\u7ebf\u5207\u5706\uff08\u5207\u4e24\u5b9a\u76f4\u7ebf\u548c\u4e00\u5b9a\u5706\u7684\u5706\uff09              ;<br \/>\n;;;\u8f93\u5165: \u4e24\u5b9a\u76f4\u7ebf\u7684\u56db\u4e2a\u7aef\u70b9\u7ed9\u5b9a\u7684\u5706\u7684\u5706\u5fc3\u53ca\u534a\u5f84        ;<br \/>\n;;;\u8f93\u51fa: \u7b26\u5408\u6761\u4ef6\u7684\u5706\u7684\u96c6\u5408(nil\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u5706\u7684\u96c6\u5408)   ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:LLC (PA PB PC PD C0 R0 \/ Ret Pts eps Int a1 a2 a3 a4 Va Vc Vp Vx Vy L G S P1 P2 Pt c d r)<br \/>\n  (setq eps 1e-6)<br \/>\n  (defun CIR:Equal (P1 P2)<br \/>\n    (equal p1 p2 1e-6)<br \/>\n  )<br \/>\n  (if (setq int (inters PA PB PC PD nil))<br \/>\n    (progn<br \/>\n      (if (equal pa int eps)<br \/>\n        (mapcar &#8216;set &#8216;(pb pa) (list pa pb))             ;\u786e\u4fddPa\u4e0eint\u4e0d\u91cd\u5408<br \/>\n      )<br \/>\n      (if (equal pc int eps)<br \/>\n        (mapcar &#8216;set &#8216;(pd pc) (list pc pd))             ;\u786e\u4fddPc\u4e0eint\u4e0d\u91cd\u5408<br \/>\n      )<br \/>\n      (setq a1 (angle int pa))<br \/>\n      (setq a2 (angle int pc))<br \/>\n      (setq Va (mapcar &#8216;- Pa Int))                      ;\u4ea4\u70b9\u5230Pa\u7684\u77e2\u91cf<br \/>\n      (setq Vc (mapcar &#8216;- Pc Int))                      ;\u4ea4\u70b9\u5230Pc\u7684\u77e2\u91cf<br \/>\n      (setq a3 (* (- a1 a2) 0.5))                       ;\u89d2\u5ea6\u5dee\u7684\u4e00\u534a<br \/>\n      (setq a4 (- a1 a3))                               ;\u89d2\u5ea6\u548c\u7684\u4e00\u534a<br \/>\n      (setq P1 (polar int a4 1000))                     ;\u89d2\u5e73\u5206\u7ebf1<br \/>\n      (setq P2 (polar int (+ a4 (* pi 0.5)) 1000))      ;\u89d2\u5e73\u5206\u7ebf2<br \/>\n      (foreach a (list 0 (* pi 0.5) Pi (* pi -0.5))<br \/>\n        (setq L (abs (\/ r0 (sin (+ a3 a)))))            ;\u5706\u5fc3\u5230\u5706\u7684\u6781\u70b9\u7684\u8ddd\u79bb<br \/>\n        (setq G (polar C0 (+ a4 a) L))<br \/>\n        (setq S (CIR:Inters_Circle_Line C0 R0 Int G))   ;\u5982\u679c\u8ddf\u5706\u76f8\u4ea4<br \/>\n        (if S<br \/>\n          (progn<br \/>\n            (setq Vp (mapcar &#8216;- G int))<br \/>\n            (setq Vx (car (trans Vp 0 Va)))<br \/>\n            (setq Vy (car (trans Vp 0 Vc)))<br \/>\n            (if (or (equal vx 0 eps) (equal vy 0 eps))  ;\u5982\u679c\u8ddf\u5176\u4e2d\u4e00\u8fb9\u76f8\u5207<br \/>\n              (setq Pt (list p1 p2))                    ;\u5219\u5185\u89d2\u548c\u5916\u89d2\u5e73\u5206\u7ebf\u90fd\u8981\u8003\u8651<br \/>\n              (if (MATH:Opposite_Sign vx vy)            ;\u8ddd\u79bb\u65b9\u5411\u662f\u5426\u76f8\u53cd<br \/>\n                (setq Pt (list p1))                     ;\u5982\u679c\u8ddd\u79bb\u65b9\u5411\u76f8\u53cd\u5219\u662f\u5185\u89d2\u5e73\u5206\u7ebf<br \/>\n                (setq Pt (list p2))                     ;\u5982\u679c\u8ddd\u79bb\u65b9\u5411\u76f8\u540c\u5219\u662f\u5916\u89d2\u5e73\u5206\u7ebf<br \/>\n              )<br \/>\n            )<br \/>\n            (foreach p S<br \/>\n              (if (not (MISC:IsExist p Pts &#8216;CIR:Equal)) ;\u907f\u514d\u91cd\u590d<br \/>\n                (progn<br \/>\n                  (setq pts (cons p pts))<br \/>\n                  (foreach q Pt<br \/>\n                    (setq c (inters p C0 Int q nil))<br \/>\n                    (if c<br \/>\n                      (setq ret (cons (list c (distance c p)) ret))<br \/>\n                      (setq ret (append (CIR:PLL-1 p PA PB Int) ret))<br \/>\n                    )<br \/>\n                  )<br \/>\n                )<br \/>\n              )<br \/>\n            )<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n    (progn<br \/>\n      (setq d (LINE:Perpendicular_Distance PA PC PD))<br \/>\n      (setq r (* d 0.5))<br \/>\n      (setq l (LINE:offset PC PD r))<br \/>\n      (grdraw (car l) (cadr l) 6)<br \/>\n      (setq r (abs r))<br \/>\n      (foreach x (list (+ r0  r) (abs (- r0 r)))<br \/>\n        (foreach c (CIR:Inters_Circle_Line C0 x (car l) (cadr l))<br \/>\n          (setq ret (cons (list c r) ret))<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n  ret<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5207\u7ebf\u5706\u5706\u753b\u5706\uff08\u4e0e\u4e00\u76f4\u7ebf\u548c\u4e24\u4e2a\u5706\u90fd\u76f8\u5207\u7684\u5706\uff09          ;<br \/>\n;;;\u8f93\u5165: \u7ed9\u5b9a\u4e00\u6761\u76f4\u7ebf\u548c\u4e24\u4e2a\u5706                          ;<br \/>\n;;;\u8f93\u51fa: \u7b26\u5408\u6761\u4ef6\u7684\u5706\u7684\u96c6\u5408(nil\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u5706\u7684\u96c6\u5408)   ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:LCC (Pa Pb C1 R1 C2 R2)<br \/>\n  (if (LINE:Colinearity C1 Pa Pb)<br \/>\n    (mapcar &#8216;set &#8216;(C1 R1 C2 R2) (list C2 R2 C1 R1))<br \/>\n  )<br \/>\n  (setq IC2 (CIR:Circle_Inversion C1 R1 C2 R2))<br \/>\n  (setq IC3 (CIR:Line_Inversion C1 R1 Pa Pb))<br \/>\n  (setq lst (append (list C1 R1) IC2 IC3))<br \/>\n  (setq ret nil)<br \/>\n  (foreach c (apply &#8216;CIR:CCC lst)<br \/>\n    (setq ret (cons (CIR:Circle_Inversion C1 R1 (car c) (cadr c)) Ret))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5207\u5207\u5207\u7684\u5706(\u4e0e\u4e09\u4e2a\u5706\u90fd\u76f8\u5207\u7684\u5706) Apollonius&#8217; problem  ;<br \/>\n;;;\u8f93\u5165: \u4e09\u4e2a\u7ed9\u5b9a\u7684\u5706\u7684\u5706\u5fc3\u53ca\u534a\u5f84                      ;<br \/>\n;;;\u8f93\u51fa: \u7b26\u5408\u6761\u4ef6\u7684\u5706\u7684\u96c6\u5408(nil\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u5706\u7684\u96c6\u5408)   ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:CCC (c1 r1 c2 r2 c3 r3 \/ CC1 CC2 CC3 CCC CEN DAT DMC EX1 EX2 EX3 HC1 HC2 HC3 HCS EPS NT1 NT2 NT3<br \/>\n                                    PC1 PC2 PC3 PS1 PS2 PS3 Pt1 Pt2 PT3 RR1 RR2 RR3 IN1 IN2 IN3 KA1 KB1 KC1<br \/>\n                                    LN1 MT1 MT2 MT3 RAD RET ISALL I AN ARG C IDX INC LST)<br \/>\n  (setq RET nil)<br \/>\n  (setq eps 1e-6)<br \/>\n  (cond<br \/>\n    ( (and (equal c1 c2 eps) (equal c2 c3 eps)) nil)<br \/>\n    ( (LINE:Colinearity c1 c2 c3)<br \/>\n      (setq lst (list (list C1 R1) (list C2 R2) (list C3 R3)))<br \/>\n      (setq idx (vl-sort-i (mapcar &#8216;cadr lst) &#8216;&gt;))<br \/>\n      (setq C1  (nth (car idx) lst))<br \/>\n      (setq C2  (nth (cadr idx) lst))<br \/>\n      (setq C3  (nth (caddr idx) lst))<br \/>\n      (setq R1  (cadr C1))<br \/>\n      (setq R2  (cadr C2))<br \/>\n      (setq R3  (cadr C3))<br \/>\n      (setq C1  (car  C1))<br \/>\n      (setq C2  (car  C2))<br \/>\n      (setq C3  (car  C3))<br \/>\n      (if (equal C1 C2 eps)<br \/>\n        (setq an (angle c1 c3))<br \/>\n        (setq an (angle c1 c2))<br \/>\n      )<br \/>\n      (setq InC (polar C1 (+ an (* pi 0.5)) (+ R1 R1)))<br \/>\n      (setq arg nil)<br \/>\n      (setq ret nil)<br \/>\n      (foreach n (list (list C1 R1) (list C2 R2) (list C3 R3))<br \/>\n        (setq C (CIR:Circle_Inversion InC R1 (car n) (cadr n)))<br \/>\n        (setq arg (append c arg))<br \/>\n      )<br \/>\n      (foreach n (apply &#8216;CIR:CCC arg)<br \/>\n        (setq C (CIR:Circle_Inversion InC R1 (car n) (cadr n)))<br \/>\n        (if (numberp (cadr c))<br \/>\n          (setq ret (cons c ret))<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n    (t<br \/>\n      (setq DMC (CIR:Power_Center c1 r1 c2 r2 c3 r3))<br \/>\n      (setq HC1 (CIR:Homothetic_Center c2 r2 c3 r3))<br \/>\n      (setq HC2 (CIR:Homothetic_Center c3 r3 c1 r1))<br \/>\n      (setq HC3 (CIR:Homothetic_Center c1 r1 c2 r2))<br \/>\n      (setq in1 (car HC1))<br \/>\n      (setq in2 (car HC2))<br \/>\n      (setq in3 (car HC3))<br \/>\n      (setq ex1 (cadr HC1))<br \/>\n      (setq ex2 (cadr HC2))<br \/>\n      (setq ex3 (cadr HC3))<\/p>\n<p>      (setq CCC (car DMC))<br \/>\n      (setq dat (cadr DMC))<br \/>\n      (setq Cen (list c1 c2 c3))<br \/>\n      (setq Rad (list r1 r2 r3))<\/p>\n<p>      (setq HCs (list (list ex1 ex2 ex3 T)<br \/>\n                      (list in3 in1 ex2)<br \/>\n                      (list in1 in2 ex3)<br \/>\n                      (list in2 in3 ex1)<br \/>\n                )<br \/>\n      )<\/p>\n<p>      (foreach x HCs<br \/>\n        (setq isAll (cadddr x))<br \/>\n        (setq Pt1 (car x))<br \/>\n        (setq Pt2 (cadr x))<br \/>\n        (setq pt3 (caddr x))<\/p>\n<p>        (setq cc1 (car cen))<br \/>\n        (setq cc2 (cadr cen))<br \/>\n        (setq cc3 (caddr cen))<\/p>\n<p>        (setq rr1 (car rad))<br \/>\n        (setq rr2 (cadr rad))<br \/>\n        (setq rr3 (caddr rad))<\/p>\n<p>        (setq cen (append (cdr cen) (list (car cen))))<br \/>\n        (setq rad (append (cdr rad) (list (car rad))))<\/p>\n<p>        (if (and (= (car Pt1) 1e400) (= (car Pt2) 1e400))<br \/>\n          (setq pc1 cc1 pc2 cc2 pc3 cc3)<br \/>\n          (progn<br \/>\n            (if (= (car Pt1) 1e400)<br \/>\n              (setq Ln1 (Line:Equation Pt2 pt3))<br \/>\n              (if (= (car Pt2) 1e400)<br \/>\n                (setq Ln1 (Line:Equation pt3 Pt1))<br \/>\n                (setq Ln1 (Line:Equation Pt1 Pt2))<br \/>\n              )<br \/>\n            )<br \/>\n            (setq kA1 (car Ln1)<br \/>\n                  kB1 (cadr ln1)<br \/>\n                  kC1 (caddr ln1)<br \/>\n                  pc1 (CIR:Polar_Point cc1 rr1 kA1 kB1 kC1)<br \/>\n                  pc2 (CIR:Polar_Point cc2 rr2 kA1 kB1 kC1)<br \/>\n                  pc3 (CIR:Polar_Point cc3 rr3 kA1 kB1 kC1)<br \/>\n            )<br \/>\n          )<br \/>\n        )<br \/>\n        (setq Ps1 (CIR:Inters_Circle_Line cc1 rr1 CCC PC1))<br \/>\n        (setq Ps2 (CIR:Inters_Circle_Line cc2 rr2 CCC pc2))<br \/>\n        (setq ps3 (CIR:Inters_Circle_Line cc3 rr3 CCC pc3))<\/p>\n<p>        (setq mt1 (car ps1))<br \/>\n        (setq mt2 (car ps2))<br \/>\n        (setq mt3 (car ps3))<\/p>\n<p>        (setq nt1 (cadr ps1))<br \/>\n        (setq nt2 (cadr ps2))<br \/>\n        (setq nt3 (cadr ps3))<\/p>\n<p>        (if (and nt1 nt2 nt3)<br \/>\n          (if isAll<br \/>\n            (setq RET (cons (CIR:PPP mt1 mt2 mt3) RET)<br \/>\n                  RET (cons (CIR:PPP nt1 nt2 nt3) RET)<br \/>\n            )<br \/>\n            (setq RET (cons (CIR:PPP mt1 nt2 nt3) RET)<br \/>\n                  RET (cons (CIR:PPP nt1 mt2 mt3) RET)<br \/>\n            )<br \/>\n          )<br \/>\n          (if (and mt1 mt2 mt3)<br \/>\n            (progn<br \/>\n              (setq nt1 mt3)<br \/>\n              (and (equal mt1 mt3 eps) (setq nt1 mt2))<br \/>\n              (setq RET (append (CIR:PPC mt1 nt1 cc1 rr1) RET))<br \/>\n            )<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n  RET<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u6309\u7167\u67d0\u4e2a\u51fd\u6570\u5347\u5e8f\u6392\u5e8f                                ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun MISC:ASort (l f)<br \/>\n  (vl-sort l (function (lambda (e1 e2) (&lt; (f e1) (f e2)))))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u6309\u7167\u67d0\u4e2a\u51fd\u6570\u964d\u5e8f\u6392\u5e8f                                ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun MISC:DSort (l f)<br \/>\n  (vl-sort l (function (lambda (e1 e2) (&gt; (f e1) (f e2)))))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u53cd\u53f7                                                ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun MISC:RevSign (f)<br \/>\n  (if (eq f +) &#8211; +)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5207\u5207\u5207\u7684\u5706(\u4e0e\u4e09\u4e2a\u5706\u90fd\u76f8\u5207\u7684\u5706) \u53e6\u4e00\u79cd\u65b9\u6cd5           ;<br \/>\n;;;\u8f93\u5165: \u4e09\u4e2a\u7ed9\u5b9a\u7684\u5706\u7684\u5706\u5fc3\u53ca\u534a\u5f84                      ;<br \/>\n;;;\u8f93\u51fa: \u7b26\u5408\u6761\u4ef6\u7684\u5706\u7684\u96c6\u5408(nil\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u5706\u7684\u96c6\u5408)   ;<br \/>\n;;;\u6ce8\u660e: \u6b64\u79cd\u4f5c\u6cd5\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u4e0d\u5b8c\u5168\uff0c\u8fd8\u662f\u4ee5\u524d\u9762\u65b9\u6cd5\u4e3a\u51c6;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:CCC_1 (c1 r1 c2 r2 c3 r3 \/ Ret C D1 D2 EPS LST R S1 S2)<br \/>\n  (setq eps 1e-6)<br \/>\n  (setq lst (mapcar &#8216;cons (list c1 c2 c3) (list r1 r2 r3)))<br \/>\n  (setq lst (MISC:ASort lst cdr))<br \/>\n  (setq c1  (caar lst))<br \/>\n  (setq c2  (caadr lst))<br \/>\n  (setq c3  (caaddr lst))<br \/>\n  (setq r1  (cdar lst))<br \/>\n  (setq r2  (cdadr lst))<br \/>\n  (setq r3  (cdaddr lst))<br \/>\n  (foreach f (mapcar &#8216;cons (list + + &#8211; -) (list + &#8211; + -))<br \/>\n    (setq s1 (car f))<br \/>\n    (setq s2 (cdr f))<br \/>\n    (foreach p (CIR:PCC c1 c2 (s1 r2 r1) c3 (s2 r3 r1))<br \/>\n      (setq c  (car p))<br \/>\n      (setq r  (cadr p))<br \/>\n      (setq d1 (distance c c2))<br \/>\n      (setq d2 (distance c c3))<br \/>\n      (cond<br \/>\n        ( (equal (abs (s1 d1 r2)) (abs (s2 d2 r3)) eps)<br \/>\n          (setq ret (cons (list c (- r r1)) ret))<br \/>\n        )<br \/>\n        ( (equal (abs ((MISC:RevSign s1) d1 r2))<br \/>\n                 (abs ((MISC:RevSign s2) d2 r3))<br \/>\n                 eps<br \/>\n          )<br \/>\n          (setq ret (cons (list c (+ r r1)) ret))<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n  ret<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u70b9\u70b9Per\u753b\u5706                                         ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PPT (Pt1 Pt2 PtM PtN \/ eps mid pt3 cen)<br \/>\n  (setq eps 1e-8)<br \/>\n  (setq Mid (Geo:MidPoint Pt1 Pt2))<br \/>\n  (setq Pt3 (GEO:Rot90 Mid Pt1 Pt2))<br \/>\n  (if (setq cen (inters Mid Pt3 PtM PtN nil))<br \/>\n    (list (list cen (distance Cen Pt1)))<br \/>\n    (if (LINE:Colinearity Mid PtM PtN)<br \/>\n      (list (list Mid (distance Mid Pt1)))<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u70b9\u5207\u7ebfPer\u753b\u5706                                       ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PLT (Pt0 PtA PtB PtM PtN \/ eps ang Pt1)<br \/>\n  (setq eps 1e-8)<br \/>\n  (setq ang (angle PtM PtN))<br \/>\n  (setq Pt1 (GEO:Mirror2D Pt0 PtM ang))<br \/>\n  (if (equal pt1 pt0 eps)<br \/>\n    (CIR:PLL Pt0 PtA PtB (GEO:Mirror2D PtA PtM ang) (GEO:Mirror2D PtB PtM ang))<br \/>\n    (CIR:PPL Pt0 Pt1 PtA PtB)<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u70b9\u5207\u5706Per\u753b\u5706                                       ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:PCT (Pt0 Cen Rad PM PN \/ eps AN C0 C1 C2 D1 D2 D3 D4 IsA IsB L PT PT1 S C R R1 R2)<br \/>\n  (setq eps 1e-8)<br \/>\n  (setq Pt1 (GEO:Mirror3D Pt0 PM PN))<br \/>\n  (setq C0  (GEO:Mirror3D Cen PM PN))<br \/>\n  (setq IsA (equal Pt0 Pt1 eps))<br \/>\n  (setq IsB (equal Cen C0 eps))<br \/>\n  (if (and IsA IsB)<br \/>\n    (progn<br \/>\n      (setq d1 (distance Pt0 Cen))<br \/>\n      (if (equal d1 0 eps)<br \/>\n        (setq an (angle PM PN))<br \/>\n        (setq an (angle Pt0 cen))<br \/>\n      )<br \/>\n      (setq R1 (* (+ d1 rad) 0.5))<br \/>\n      (setq R2 (* (- d1 rad) 0.5))<br \/>\n      (setq C1 (polar Pt0 an R1))<br \/>\n      (setq C2 (polar Pt0 an R2))<br \/>\n      (list (list C1 R1) (list C2 (abs R2)))<br \/>\n    )<br \/>\n    (if IsA<br \/>\n      (progn<br \/>\n        (and (equal Pt0 PM eps) (setq Pt PM PM PN PN Pt))<br \/>\n        (setq an (angle PM Pt0))<br \/>\n        (setq Pt (trans (mapcar &#8216;- Cen Pt0) 0 (mapcar &#8216;- Pt0 pM)))<br \/>\n        (setq d1 (car pt))<br \/>\n        (setq d2 (caddr Pt))<br \/>\n        (setq d3 (- d2 rad))<br \/>\n        (setq d4 (+ d2 rad))<br \/>\n        (setq L  (+ (* d1 d1) (* d3 d4)))<br \/>\n        (foreach d (list (+ d3 d3) (+ d4 d4))<br \/>\n          (if (not (equal d 0 eps))<br \/>\n            (setq r (\/ L d)<br \/>\n                  c (polar Pt0 an (\/ L d))<br \/>\n                  S (cons (list c (abs r)) S)<br \/>\n            )<br \/>\n          )<br \/>\n        )<br \/>\n        S<br \/>\n      )<br \/>\n      (CIR:PPC Pt0 Pt1 Cen Rad)<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5207\u7ebf\u5207\u7ebfPer\u753b\u5706                                     ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:LLT (PA PB PC PD PM PN \/ eps int p1 p2 an cen per ret)<br \/>\n  (setq eps 1e-8)<br \/>\n  (if (setq int (inters PA PB PC PD nil))<br \/>\n    (progn<br \/>\n      (setq an (* (+ (angle pa pb) (angle pc pd)) 0.5))<br \/>\n      (foreach a (list an (+ an (* pi 0.5)))<br \/>\n        (setq p1 (polar int a 100))<br \/>\n        (if (setq cen (inters int p1 PM PN nil))<br \/>\n          (setq Per (LINE:Perpendicular_Foot Cen PA PB)<br \/>\n                ret (cons (list cen (abs (car per))) ret)<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n      ret<br \/>\n    )<br \/>\n    (progn<br \/>\n      (setq P1  (GEO:Midpoint PA PC))<br \/>\n      (setq P2  (polar p1 (angle Pa Pb) 100))<br \/>\n      (setq Cen (inters P1 P2 PM PN nil))<br \/>\n      (setq Per (LINE:Perpendicular_Foot Cen PA PB))<br \/>\n      (setq ret (list (list cen (abs (car per)))))<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5207\u7ebf\u5207\u5706Per\u753b\u5706                                     ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:LCT (PtA PtB Cen Rad PtM PtN \/ Pt1 Pt2)<br \/>\n  (setq Pt1 (GEO:Mirror3d PtA PtM PtN))<br \/>\n  (setq Pt2 (GEO:Mirror3d PtB PtM PtN))<br \/>\n  (vl-remove-if-not<br \/>\n    (function (lambda (x) (LINE:Colinearity (car x) PtM PtN)))<br \/>\n    (CIR:LLC PtA PtB Pt1 Pt2 Cen Rad)<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u4e24\u4e2a\u5706\u7684\u4f4d\u4f3c\u4e2d\u5fc3 Internal,External Homothetic Center;<br \/>\n;;;\u4e5f\u5c31\u662f\u516c\u5207\u7ebf\u7684\u4ea4\u70b9(\u5f53\u7136\u4e5f\u5305\u62ec\u6ca1\u6709\u516c\u5207\u7ebf\u65f6\u5019\u7684\u60c5\u51b5)  ;<br \/>\n;;;\u8f93\u5165: \u4e24\u4e2a\u5706\u7684\u5706\u5fc3\u548c\u534a\u5f84                            ;<br \/>\n;;;\u8f93\u51fa: \u7b2c\u4e00\u4e2a\u4e3a\u5185\u4f4d\u4f3c\u4e2d\u5fc3\uff0c\u7b2c\u4e8c\u4e2a\u4e3a\u5916\u4f4d\u4f3c\u4e2d\u5fc3        ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Homothetic_Center (c1 r1 c2 r2 \/)<br \/>\n  (if (equal r1 r2 1e-14)<br \/>\n    (list (GEO:Midpoint c1 c2) &#8216;(1e400 1e400 0))        ;\u4e2d\u70b9\u548c\u65e0\u7a77\u8fdc\u70b9<br \/>\n    (list (GEO:Scale c2 c1 (\/ r1 (+ r1 r2)))            ;\u5185\u4f4d\u4f3c\u4e2d\u5fc3<br \/>\n          (GEO:Scale c2 c1 (\/ r1 (- r1 r2)))            ;\u5916\u4f4d\u4f3c\u4e2d\u5fc3<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u70b9\u7684\u53cd\u6f14                                            ;<br \/>\n;;;\u8f93\u5165: \u5706\u5fc3\uff0c\u534a\u5f84\u548c\u4e00\u70b9                              ;<br \/>\n;;;\u8f93\u51fa: nil\u6216\u8005\u53cd\u6f14\u70b9                                 ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Inversion (c r p \/ d)<br \/>\n  (setq d (distance c p))<br \/>\n  (if (equal d 0 1e-8)<br \/>\n    nil                                                 ;\u5706\u5fc3\u5904\u6ca1\u6709\u53cd\u6f14\u70b9<br \/>\n    (polar c (angle c p) (\/ (* r r) d))                 ;\u6839\u636e\u53cd\u6f14\u516c\u5f0f\u8ba1\u7b97<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u76f4\u7ebf\u5bf9\u5706\u7684\u53cd\u6f14                                      ;<br \/>\n;;;\u8f93\u5165: \u5706\u5fc3\uff0c\u534a\u5f84\u548c\u4e00\u70b9                              ;<br \/>\n;;;\u8f93\u51fa: \u4e00\u4e2a\u7528\u5706\u5fc3\u548c\u534a\u5f84\u8868\u793a\u7684\u5706\u6216\u8005\u76f4\u7ebf\u672c\u8eab          ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Line_Inversion (Cen Rad P1 P2 \/ d p q c r)<br \/>\n  (setq p (Line:Perpendicular_Foot Cen P1 P2))<br \/>\n  (setq d (car p))<br \/>\n  (setq p (cadr p))<br \/>\n  (if (equal d 0.0 1e-8)<br \/>\n    (list P1 P2)                                        ;\u7ecf\u8fc7\u5706\u5fc3\u7684\u76f4\u7ebf\u662f\u672c\u8eab<br \/>\n    (setq q (CIR:Inversion Cen Rad p)<br \/>\n          c (GEO:Midpoint q Cen)<br \/>\n          r (list c (distance c Cen))                   ;\u628a\u76f4\u7ebf\u53cd\u6f14\u6210\u5706<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5706\u5bf9\u5706\u7684\u53cd\u6f14                                        ;<br \/>\n;;;\u8f93\u5165: \u53cd\u6f14\u5706\u7684\u5706\u5fc3\u534a\u5f84\u548c\u88ab\u53cd\u6f14\u7684\u5706\u7684\u5706\u5fc3\uff0c\u534a\u5f84      ;<br \/>\n;;;\u8f93\u51fa: \u4e00\u4e2a\u7528\u5706\u5fc3\u548c\u534a\u5f84\u8868\u793a\u7684\u5706\u6216\u8005\u4e00\u6761\u76f4\u7ebf\u7684\u4e24\u4e2a\u7aef\u70b9;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Circle_Inversion (C0 R0 C R \/ an P1 P2 PM)<br \/>\n  (if (equal C0 C 1e-8)<br \/>\n    (list C0 (* (\/ R0 R) R0))<br \/>\n    (progn<br \/>\n      (setq an (angle C C0))<br \/>\n      (setq p1 (CIR:Inversion C0 R0 (polar C an R)))<br \/>\n      (setq p2 (CIR:Inversion C0 R0 (polar C an (- R))))<br \/>\n      (if (and p1 p2)<br \/>\n        (list (GEO:Midpoint  p1 p2) (* (distance p1 p2) 0.5))<br \/>\n        (progn<br \/>\n          (setq PM (GEO:Midpoint  C0 (CIR:Inversion C0 R0 C)))<br \/>\n          (list PM (mapcar &#8216;+ PM (MAT:Rot90 (mapcar &#8216;- PM C0))))<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u7ebf\u6bb5(\u7528\u7cfb\u6570\u8868\u793a)\u5bf9\u5706\u7684\u6781\u70b9                          ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Polar_Point (cen rad A B C \/ p d)<br \/>\n  (setq p (Line:Perpendicular_Distance_1 Cen A B C))<br \/>\n  (setq d (car p))<br \/>\n  (setq p (cadr p))<br \/>\n  (if (\/= d 0)<br \/>\n    (polar cen (angle cen p) (\/ (* rad rad) (abs d)))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u7ebf\u6bb5(\u7528\u4e24\u70b9\u8868\u793a)\u5bf9\u5706\u7684\u6781\u70b9                          ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Polar_Point_1 (cen rad Pa Pb \/ p d)<br \/>\n  (setq p (Line:Perpendicular_Foot Cen Pa Pb))<br \/>\n  (setq d (car p))<br \/>\n  (setq p (cadr p))<br \/>\n  (if (\/= d 0)<br \/>\n    (polar cen (angle cen p) (\/ (* rad rad) (abs d)))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u7b49\u5e42\u8f74                                              ;<br \/>\n;;;\u8f93\u5165: \u7ed9\u5b9a\u7684\u4e24\u4e2a\u5706\u7684\u5706\u5fc3\u548c\u534a\u5f84                      ;<br \/>\n;;;\u8f93\u51fa: \u8fd9\u4e24\u4e2a\u5706\u7684\u7b49\u5e42\u8f74\u4e0e\u5b83\u4eec\u7684\u5706\u5fc3\u8fde\u7ebf\u7684\u4ea4\u70b9        ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Radical_Axis (c1 r1 c2 r2 \/ l d)<br \/>\n  (setq l (distance c1 c2))<br \/>\n  (if (equal l 0 1e-8)<br \/>\n    (setq d (if (&gt; r1 r2) 1e400 -1e400))<br \/>\n    (setq d (* 0.5 (+ L (\/ (* (+ r1 r2) (- r1 r2)) L))))<br \/>\n  )<br \/>\n  (polar c1 (angle c1 c2) d)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u7b49\u5e42\u4e2d\u5fc3(\u4e09\u4e2a\u5706\u5f62\u7684\u7b49\u5e42\u8f74\u7684\u4ea4\u70b9)    Radical center, ;<br \/>\n;;;also called the power center of three circles       ;<br \/>\n;;;\u8f93\u5165: \u4e09\u4e2a\u5706\uff08\u7528\u4e2d\u5fc3\u534a\u5f84\u8868\u793a\uff09                      ;<br \/>\n;;;\u8f93\u51fa: \u8fd9\u4e09\u4e2a\u5706\u7684\u7b49\u5e42\u4e2d\u5fc3                            ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Power_Center (c1 r1 c2 r2 c3 r3 \/ p1 p2 q1 q2 CC d k)<br \/>\n  (setq P1 (CIR:Radical_Axis c1 r1 c2 r2))<br \/>\n  (setq P2 (CIR:Radical_Axis c2 r2 c3 r3))<br \/>\n  (if (and p1 p2)<br \/>\n    (progn<br \/>\n      (setq q1 (GEO:Rot90 p1 c1 c2))<br \/>\n      (setq q2 (GEO:Rot90 p2 c2 c3))<br \/>\n      (setq CC (inters p1 q1 p2 q2 nil))<br \/>\n      (if CC<br \/>\n        (progn<br \/>\n          (setq d (distance CC C1))<br \/>\n          (setq k (* (+ d r1) (- d r1)))<br \/>\n          (list cc K)<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u963f\u6ce2\u7f57\u5c3c\u5965\u65af\u5706Apollonian circles                    ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Apollonian_Circle (P1 P2 k \/ k k1 k2 d rt)<br \/>\n  (if (and (&gt; k 0) (\/= k 1))<br \/>\n    (setq k1 (* k k)<br \/>\n          k2 (\/ 1.0 (1- k1))<br \/>\n          d  (distance p1 p2)<br \/>\n          Rt (list (mapcar (function (lambda (i j) (* k2 (- (* k1 j) i)))) p1 p2)<br \/>\n                   (abs (* d k k2))<br \/>\n             )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5171\u8f74\u5706                                              ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Coaxal_Circle (c1 r1 c2 r2 \/ P1 P2 d1 d2 RT)<br \/>\n  (foreach HC (CIR:Homothetic_Center c1 r1 c2 r2)<br \/>\n    (if (= (car HC) 1e400)<br \/>\n      (setq P1 (Geo:MidPoint C1 C2)<br \/>\n            P2 (polar P1 (+ (angle C1 C2) (* pi 0.5)) 1000)<br \/>\n            RT (cons (list P1 P2) RT)<br \/>\n      )<br \/>\n      (setq p1 (polar C1 (angle HC C1) r1)<br \/>\n            p2 (polar c2 (angle HC C2) (- r2))<br \/>\n            d1 (distance HC p1)<br \/>\n            d2 (distance HC p2)<br \/>\n            RT (cons (list HC (sqrt (* d1 d2))) RT)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5171\u8f74\u5706\u7684\u7279\u6b8a\u60c5\u51b5\uff08\u5176\u4e2d\u4e00\u4e2a\u5706\u9000\u5316\u4e3a\u4e00\u70b9\uff09            ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Radical_Axis_Point (C R P \/ l d)<br \/>\n  (if (equal c p 1e-8)<br \/>\n    nil<br \/>\n    (progn<br \/>\n      (setq l (distance c p))<br \/>\n      (setq d (\/ (+ (* r r) (* l l)) 2 l))<br \/>\n      (polar c (angle c p) d)<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u5361\u65af\u8482\u90ce\u6c42\u89e3                                        ;<br \/>\n;;;Castillon&#8217;s Problem                                 ;<br \/>\n;;;\u8f93\u5165: \u4e00\u7ed9\u5b9a\u5706\uff08\u5706\u5fc3\u534a\u5f84\u8868\u793a\uff09\u548c\u4e0d\u91cd\u5408\u7684\u4e09\u5b9a\u70b9\u3002    ;<br \/>\n;;;\u8f93\u51fa\uff1a\u5706\u4e0a\u4e09\u70b9\uff0c\u4f7f\u5f97\u4e09\u5df2\u77e5\u70b9\u5206\u522b\u901a\u8fc7\u8fd9\u4e09\u70b9\u5f62\u6210\u7684\u8fb9  ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun CIR:Castillon (Cen Rad pa pb pc \/ EPS INT1 INT2 L d1 d2 d3 LST P0 P1 P2 x0 y0 RET)<br \/>\n  (defun Check (Func lst d eps)<br \/>\n    (apply Func (mapcar (function (lambda (x) (equal x d eps))) lst))<br \/>\n  )<br \/>\n  (setq eps 1e-6)<br \/>\n  (setq d1 (abs (- rad (distance pa cen))))<br \/>\n  (setq d2 (abs (- rad (distance pb cen))))<br \/>\n  (setq d3 (abs (- rad (distance pc cen))))<br \/>\n  (if (Check &#8216;or (list d1 d2 d3) 0 eps)<br \/>\n    (if (Check &#8216;and (list d1 d2 d3) 0 eps)<br \/>\n      (list (list pa pb pc))<br \/>\n      (setq l   (vl-sort-i (list d1 d2 d3) &#8216;&lt;)<br \/>\n            lst (list pa pb pc)<br \/>\n            pa  (nth (car l) lst)<br \/>\n            pb  (nth (cadr l) lst)<br \/>\n            pc  (nth (caddr l) lst)<br \/>\n            p0  Pa<br \/>\n            p1  (CIR:Intersecting_Chords P0 pb Cen Rad)<br \/>\n            p2  (CIR:Intersecting_Chords P1 PC Cen Rad)<br \/>\n            ret (cons (list p0 p1 p2) ret)<br \/>\n            p1  (CIR:Intersecting_Chords P0 pc Cen Rad)<br \/>\n            p2  (CIR:Intersecting_Chords P1 pb Cen Rad)<br \/>\n            ret (cons (list P0 p1 p2) ret)<br \/>\n      )<br \/>\n    )<br \/>\n    (progn<br \/>\n      (foreach an (list 1 2 3)<br \/>\n        (setq x0 (+ (* rad (cos an)) (car Cen)))<br \/>\n        (setq y0 (+ (* rad (sin an)) (cadr Cen)))<br \/>\n        (setq p0 (list x0 y0 0))<br \/>\n        (setq p1 p0)<br \/>\n        (foreach p (list pa pb pc)<br \/>\n          (setq P2 (CIR:Intersecting_Chords P1 P cen rad))<br \/>\n          (setq p1 p2)<br \/>\n        )<br \/>\n        (setq lst (cons (cons p0 p2) lst))<br \/>\n      )<br \/>\n      ;;\u5230\u8fd9\u6b65\u5f97\u5230\u4e09\u4e2a\u4e8c\u91cd\u6620\u5c04\u70b9\u3002<br \/>\n      (setq int1 (inters (caar lst) (cdadr lst) (cdar lst) (caadr lst) nil))<br \/>\n      (setq int2 (inters (caar lst) (cdaddr lst) (cdar lst) (caaddr lst) nil))<br \/>\n      (if (and int1 int2)<br \/>\n        (foreach q (CIR:Inters_Circle_Line cen rad int1 int2)<br \/>\n          (setq l (list q))<br \/>\n          (setq p1 q)<br \/>\n          (foreach p (list pa pb)<br \/>\n            (setq p2 (CIR:Intersecting_Chords p1 p cen rad))<br \/>\n            (setq l (cons p2 l))<br \/>\n            (setq p1 p2)<br \/>\n          )<br \/>\n          (setq ret (cons (reverse l) ret))<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u4ee5\u4e0b\u6837\u4f8b\u4ec5\u4f9b\u6d4b\u8bd5\u3002                                  ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;A sample for Apollonian circles                     ;<br \/>\n;;;\u963f\u6ce2\u7f57\u5c3c\u65af\u5706\u7684\u6d4b\u8bd5\u6837\u4f8b                              ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun c:cac (\/ p1 p2 k rt)<br \/>\n  (initget 1)<br \/>\n  (setq p1 (getpoint &#8220;n\u70b91:&#8221;))<br \/>\n  (initget 2)<br \/>\n  (setq p2 (getpoint p1 &#8220;n\u70b92:&#8221;))<br \/>\n  (initget 7)<br \/>\n  (setq k  (getreal &#8220;n\u6bd4\u4f8b:&#8221;))<br \/>\n  (Ent:Make_Line p1 P2)<br \/>\n  (setq rt (CIR:Apollonian_Circle P1 P2 k))<br \/>\n  (and rt (apply &#8216;Ent:Make_Circle rt))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;A sample for CIR:coaxl_Circle                       ;<br \/>\n;;;\u5171\u8f74\u5706\u7684\u6d4b\u8bd5\u6837\u4f8b                                    ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun C:CXC (\/ sel d1 d2 c1 c2 r1 r1 rt)<br \/>\n  (setq sel (ssget &#8216;((0 . &#8220;CIRCLE,ARC&#8221;))))<br \/>\n  (if (and sel (&gt;= (sslength sel) 2))<br \/>\n    (progn<br \/>\n      (setq d1 (entget (ssname sel 0)))<br \/>\n      (setq d2 (entget (ssname sel 1)))<br \/>\n      (setq c1 (cdr (assoc 10 d1)))<br \/>\n      (setq c2 (cdr (assoc 10 d2)))<br \/>\n      (setq r1 (cdr (assoc 40 d1)))<br \/>\n      (setq r2 (cdr (assoc 40 d2)))<br \/>\n      (setq rt (CIR:Coaxal_Circle c1 r1 c2 r2))<br \/>\n      (foreach c rt<br \/>\n        (if (numberp (cadr c))<br \/>\n          (apply &#8216;Ent:Make_Circle c)<br \/>\n          (apply &#8216;Ent:Make_Line c)<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;A sample for CIR:Radical_Axis_Point                 ;<br \/>\n;;;\u5171\u8f74\u5706\u7279\u4f8b\u7684\u6d4b\u8bd5\u6837                                  ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n(defun c:rax1(\/ e p d r c ret)<br \/>\n  (setq e (car (entsel &#8220;n\u57061:&#8221;)))<br \/>\n  (setq p (getpoint &#8220;n\u70b9:&#8221;))<br \/>\n  (if (and e p)<br \/>\n    (progn<br \/>\n      (setq d (entget e))<br \/>\n      (setq r (cdr (assoc 40 d))<br \/>\n            c (cdr (assoc 10 d))<br \/>\n      )<br \/>\n      (Ent:Make_Point p)<br \/>\n      (setq ret (CIR:Radical_Axis_Point C R p))<br \/>\n      (and ret (Ent:Make_Point ret))<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;A sample for Castillon&#8217;s problem<br \/>\n(defun C:Castillon(\/ ss pa pb pc ent dxf rad cen ret)<br \/>\n  (setq ss (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;CIRCLE,ARC&#8221;))))<br \/>\n  (initget 1)<br \/>\n  (setq pa (getpoint &#8220;n\u70b91:&#8221;))<br \/>\n  (initget 2)<br \/>\n  (setq pb (getpoint &#8220;n\u70b92:&#8221;))<br \/>\n  (initget 3)<br \/>\n  (setq pc (getpoint &#8220;n\u70b93:&#8221;))<br \/>\n  (if ss<br \/>\n    (progn<br \/>\n      (setq ent (ssname ss 0))<br \/>\n      (setq dxf (entget ent))<br \/>\n      (setq rad (cdr (assoc 40 dxf)))<br \/>\n      (setq cen (cdr (assoc 10 dxf)))<br \/>\n      (mapcar &#8216;Ent:Make_Point (list pa pb pc))<br \/>\n      (setq ret (CIR:Castillon Cen Rad pa pb pc))<br \/>\n      (foreach p ret<br \/>\n        (apply &#8216;Ent:Make_Triangle p)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u70b9\u70b9Per\u753b\u5706<br \/>\n(defun C:PPT (\/ s1 p1 p2 dxf pta ptb ret)<br \/>\n  (prompt &#8220;n\u9009\u53d6\u7ebf\u6bb5: &#8220;)<br \/>\n  (setq s1 (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n  (initget 1)<br \/>\n  (setq p1 (getpoint &#8220;n\u70b91:&#8221;))<br \/>\n  (initget 1)<br \/>\n  (setq p2 (getpoint &#8220;n\u70b91:&#8221;))<br \/>\n  (if (and s1 p1 P2)<br \/>\n    (progn<br \/>\n      (setq dxf (entget (ssname s1 0)))<br \/>\n      (setq ptA (cdr (assoc 10 dxf)))<br \/>\n      (setq ptB (cdr (assoc 11 dxf)))<br \/>\n      (grdraw p1 p2 1)<br \/>\n      (setq ret (CIR:PPT P1 P2 PtA PtB))<br \/>\n      (foreach p Ret<br \/>\n        (apply &#8216;ENt:Make_circle p)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u70b9\u70b9Per\u753b\u5706<br \/>\n(defun C:PLT (\/ sel Pt0 d1 d2 PtA PtB PtC PtD Ret)<br \/>\n  (prompt &#8220;n\u9009\u53d6\u7ebf\u6bb5: &#8220;)<br \/>\n  (setq sel (ssget &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n  (initget 1)<br \/>\n  (setq Pt0 (getpoint &#8220;n\u70b91:&#8221;))<br \/>\n  (if (and sel Pt0 (&gt;= (sslength sel) 2))<br \/>\n    (progn<br \/>\n      (setq d1  (entget (ssname sel 0)))<br \/>\n      (setq d2  (entget (ssname sel 1)))<br \/>\n      (setq ptA (cdr (assoc 10 d1)))<br \/>\n      (setq ptB (cdr (assoc 11 d1)))<br \/>\n      (setq ptC (cdr (assoc 10 d2)))<br \/>\n      (setq ptD (cdr (assoc 11 d2)))<br \/>\n      (setq ret (CIR:PLT Pt0 PtA PtB PtC PtD))<br \/>\n      (foreach p Ret<br \/>\n        (apply &#8216;ENt:Make_circle p)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<br \/>\n(defun c:LCC(\/ s1 s2 d1 d2 d3 pa pb c1 r1 c2 r2 ret)<br \/>\n  (prompt &#8220;n\u9009\u7ebf: &#8220;)<br \/>\n  (setq s1 (ssget &#8220;_+.:E:S:L&#8221; &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n  (prompt &#8220;n\u9009\u5706: &#8220;)<br \/>\n  (setq s2 (ssget &#8216;((0 . &#8220;ARC,CIRCLE&#8221;))))<br \/>\n  (if (and s1 s2 (&gt;= (sslength s2) 2))<br \/>\n    (progn<br \/>\n      (setq d1 (entget (ssname s1 0)))<br \/>\n      (setq d2 (entget (ssname s2 0)))<br \/>\n      (setq d3 (entget (ssname s2 1)))<br \/>\n      (setq pA (cdr (assoc 10 d1)))<br \/>\n      (setq pB (cdr (assoc 11 d1)))<br \/>\n      (setq C1 (cdr (assoc 10 d2)))<br \/>\n      (setq R1 (cdr (assoc 40 d2)))<br \/>\n      (setq C2 (cdr (assoc 10 d3)))<br \/>\n      (setq R2 (cdr (assoc 40 d3)))<br \/>\n      (command &#8220;undo&#8221; &#8220;be&#8221;)<br \/>\n      (setq ReT (CIR:LCC Pa Pb C1 R1 C2 R2))<br \/>\n      (foreach p ReT<br \/>\n        (apply &#8216;ENt:Make_circle p)<br \/>\n      )<br \/>\n      (command &#8220;undo&#8221; &#8220;e&#8221;)<br \/>\n    )<br \/>\n  )<br \/>\n  (princ)<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u70b9\u70b9Per\u753b\u5706<br \/>\n(defun C:LLT (\/ sel Pt0 d1 d2 PtA PtB PtC PtD Ret)<br \/>\n  (prompt &#8220;n\u9009\u53d6\u7ebf\u6bb5: &#8220;)<br \/>\n  (setq sel (ssget &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n  (if (and sel (&gt;= (sslength sel) 3))<br \/>\n    (progn<br \/>\n      (setq d1 (entget (ssname sel 0)))<br \/>\n      (setq d2 (entget (ssname sel 1)))<br \/>\n      (setq d3 (entget (ssname sel 2)))<br \/>\n      (setq pA (cdr (assoc 10 d1)))<br \/>\n      (setq pB (cdr (assoc 11 d1)))<br \/>\n      (setq pC (cdr (assoc 10 d2)))<br \/>\n      (setq pD (cdr (assoc 11 d2)))<br \/>\n      (setq pM (cdr (assoc 10 d3)))<br \/>\n      (setq pN (cdr (assoc 11 d3)))<br \/>\n      (setq RT (CIR:LLT PA PB PC PD PM PN))<br \/>\n      (foreach p RT<br \/>\n        (apply &#8216;ENt:Make_circle p)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u5207\u7ebf\u5207\u5706Per\u753b\u5706<br \/>\n(defun C:PCT (\/ ss1 ss2 pt0 dx1 dx2 ptM ptN Cen Rad Ret)<br \/>\n  (prompt &#8220;n\u9009\u7ebf: &#8220;)<br \/>\n  (setq ss1 (ssget &#8220;_+.:E:S:L&#8221; &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n  (prompt &#8220;n\u9009\u5706: &#8220;)<br \/>\n  (setq ss2 (ssget &#8220;_+.:E:S:L&#8221; &#8216;((0 . &#8220;ARC,CIRCLE&#8221;))))<br \/>\n  (initget 1)<br \/>\n  (setq Pt0 (getpoint &#8220;n\u9009\u53d6\u70b9:&#8221;))<br \/>\n  (if (and ss1 ss2)<br \/>\n    (progn<br \/>\n      (setq dx1 (entget (ssname ss1 0)))<br \/>\n      (setq dx2 (entget (ssname ss2 0)))<br \/>\n      (setq ptM (cdr (assoc 10 dx1)))<br \/>\n      (setq ptN (cdr (assoc 11 dx1)))<br \/>\n      (setq cen (cdr (assoc 10 dx2)))<br \/>\n      (setq rad (cdr (assoc 40 dx2)))<br \/>\n      (Ent:Make_Point Pt0)<br \/>\n      (setq Ret (CIR:PCT Pt0 Cen Rad PtM PtN))<br \/>\n      (foreach p Ret<br \/>\n        (apply &#8216;ENt:Make_circle p)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u5207\u7ebf\u5207\u5706Per\u753b\u5706<br \/>\n(defun C:LCT (\/ s1 s2 d1 d2 d3 pa pb pc pd c0 r0 ret)<br \/>\n  (prompt &#8220;n\u9009\u7ebf: &#8220;)<br \/>\n  (setq s1 (ssget  &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n  (prompt &#8220;n\u9009\u5706: &#8220;)<br \/>\n  (setq s2 (ssget &#8220;_+.:E:S:L&#8221; &#8216;((0 . &#8220;ARC,CIRCLE&#8221;))))<br \/>\n  (if (and s1 s2 (&gt;= (sslength s1) 2))<br \/>\n    (progn<br \/>\n      (setq d1 (entget (ssname s1 0)))<br \/>\n      (setq d2 (entget (ssname s1 1)))<br \/>\n      (setq d3 (entget (ssname s2 0)))<br \/>\n      (setq pA (cdr (assoc 10 d1)))<br \/>\n      (setq pB (cdr (assoc 11 d1)))<br \/>\n      (setq pC (cdr (assoc 10 d2)))<br \/>\n      (setq pD (cdr (assoc 11 d2)))<br \/>\n      (setq c0 (cdr (assoc 10 d3)))<br \/>\n      (setq r0 (cdr (assoc 40 d3)))<br \/>\n      (command &#8220;undo&#8221; &#8220;be&#8221;)<br \/>\n      (setq ret (CIR:LCT Pa Pb C0 R0 Pc Pd))<br \/>\n      (foreach p ret<br \/>\n        (apply &#8216;ENt:Make_circle p)<br \/>\n      )<br \/>\n      (command &#8220;undo&#8221; &#8220;e&#8221;)<br \/>\n    )<br \/>\n  )<br \/>\n  (princ)<br \/>\n)<br \/>\n;;;\u6d4b\u8bd5\u5207\u7ebf\u5207\u5706Per\u753b\u5706<br \/>\n(defun C:LLC (\/ s1 s2 d1 d2 d3 pa pb pc pd c0 r0 ret)<br \/>\n  (prompt &#8220;n\u9009\u7ebf: &#8220;)<br \/>\n  (setq s1 (ssget  &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n  (prompt &#8220;n\u9009\u5706: &#8220;)<br \/>\n  (setq s2 (ssget &#8220;_+.:E:S:L&#8221; &#8216;((0 . &#8220;ARC,CIRCLE&#8221;))))<br \/>\n  (if (and s1 s2 (&gt;= (sslength s1) 2))<br \/>\n    (progn<br \/>\n      (setq d1 (entget (ssname s1 0)))<br \/>\n      (setq d2 (entget (ssname s1 1)))<br \/>\n      (setq d3 (entget (ssname s2 0)))<br \/>\n      (setq pA (cdr (assoc 10 d1)))<br \/>\n      (setq pB (cdr (assoc 11 d1)))<br \/>\n      (setq pC (cdr (assoc 10 d2)))<br \/>\n      (setq pD (cdr (assoc 11 d2)))<br \/>\n      (setq c0 (cdr (assoc 10 d3)))<br \/>\n      (setq r0 (cdr (assoc 40 d3)))<br \/>\n      (command &#8220;undo&#8221; &#8220;be&#8221;)<br \/>\n      (setq ret (CIR:LLC PA PB PC PD C0 R0))<br \/>\n      (foreach p ret<br \/>\n        (apply &#8216;ENt:Make_circle p)<br \/>\n      )<br \/>\n      (command &#8220;undo&#8221; &#8220;e&#8221;)<br \/>\n    )<br \/>\n  )<br \/>\n  (princ)<br \/>\n)<\/p>\n<p>;;; A sample for CIR:Inters_Circle_Line<br \/>\n;;; \u7ebf\u5706\u6c42\u4ea4\u793a\u4f8b<br \/>\n(defun C:CIL (\/ s1 s2 dx1 dx2 pta ptb cen rad ret)<br \/>\n  (prompt &#8220;n\u9009\u53d6\u7ebf\u6bb5: &#8220;)<br \/>\n  (setq s1 (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n  (prompt &#8220;n\u9009\u53d6\u5706: &#8220;)<br \/>\n  (setq s2 (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;CIRCLE,ARC&#8221;))))<br \/>\n  (if (and s1 s2)<br \/>\n    (progn<br \/>\n      (setq dx1 (entget (ssname s1 0)))<br \/>\n      (setq dx2 (entget (ssname s2 0)))<br \/>\n      (setq ptA (cdr (assoc 10 dx1)))<br \/>\n      (setq ptB (cdr (assoc 11 dx1)))<br \/>\n      (setq cen (cdr (assoc 10 dx2)))<br \/>\n      (setq rad (cdr (assoc 40 dx2)))<br \/>\n      (setq ret (CIR:Inters_Circle_Line cen rad PtA PtB))<br \/>\n      (foreach p Ret<br \/>\n        (Ent:Make_Point p)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;; A sample for CIR:LLR<br \/>\n;;; CIR:LLR\u6837\u4f8b<br \/>\n(defun c:LLR (\/ sel rad en1 en2 dx1 dx2 pta ptb ptc ptd ret)<br \/>\n  (setq sel (ssget &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n  (initget 1)<br \/>\n  (setq rad (getdist &#8220;n\u534a\u5f84:&#8221;))<br \/>\n  (if (and sel (&gt;= (sslength sel) 2))<br \/>\n    (progn<br \/>\n      (setq en1 (ssname sel 0))<br \/>\n      (setq en2 (ssname sel 1))<br \/>\n      (setq dx1 (entget en1))<br \/>\n      (setq dx2 (entget en2))<br \/>\n      (setq PtA (cdr (assoc 10 d1)))<br \/>\n      (setq PtB (cdr (assoc 11 d1)))<br \/>\n      (setq PtC (cdr (assoc 10 d2)))<br \/>\n      (setq PtD (cdr (assoc 11 d2)))<br \/>\n      (if (setq ret (CIR:LLR PtA PtB PtC PtD Rad))<br \/>\n        (foreach p ret<br \/>\n          (apply &#8216;Ent:Make_Circle p)<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;; A sample for CIR:PLR<br \/>\n;;; CIR:PLR\u6837\u4f8b<br \/>\n(defun c:PLR (\/ pt0 sel rad ent dxf pta ptb ret)<br \/>\n  (initget 1)<br \/>\n  (setq pt0 (getpoint &#8220;n1:&#8221;))<br \/>\n  (initget 1)<br \/>\n  (setq sel (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n  (initget 7)<br \/>\n  (setq rad (getdist &#8220;n\u534a\u5f84:&#8221;))<br \/>\n  (if (and sel pt0 rad)<br \/>\n    (progn<br \/>\n      (setq ent (ssname sel 0))<br \/>\n      (setq dxf (entget ent))<br \/>\n      (setq PtA (cdr (assoc 10 dxf)))<br \/>\n      (setq PtB (cdr (assoc 11 dxf)))<br \/>\n      (if (setq ret (CIR:PLR Pt0 PtA PtB Rad))<br \/>\n        (foreach p ret<br \/>\n          (apply &#8216;Ent:Make_Circle p)<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;; A sample for CIR:PPR<br \/>\n;;; CIR:PPR\u6837\u4f8b<br \/>\n(defun c:PPR (\/ pta ptb rad ret)<br \/>\n  (initget 1)<br \/>\n  (setq pta (getpoint &#8220;n1:&#8221;))<br \/>\n  (initget 1)<br \/>\n  (setq ptb (getpoint &#8220;n2:&#8221;))<br \/>\n  (initget 7)<br \/>\n  (setq rad (getdist &#8220;n\u534a\u5f84:&#8221;))<br \/>\n  (if (setq ret (CIR:PPR pta ptb rad))<br \/>\n    (foreach p ret<br \/>\n      (apply &#8216;Ent:Make_Circle p)<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;; A sample for CIR:LCR<br \/>\n;;; CIR:LCR\u6837\u4f8b<br \/>\n(defun c:LCR (\/ s1 s2 r1 d1 d2 pa pb c0 r0)<br \/>\n  (prompt &#8220;n\u9009\u62e9\u76f4\u7ebf&#8221;)<br \/>\n  (setq s1 (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n  (prompt &#8220;n\u9009\u62e9\u5706&#8221;)<br \/>\n  (setq s2 (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;CIRCLE,ARC&#8221;))))<br \/>\n  (initget 7)<br \/>\n  (setq r1 (getdist &#8220;n\u534a\u5f84:&#8221;))<br \/>\n  (if (and s1 s2 r1)<br \/>\n    (progn<br \/>\n      (setq d1 (entget (ssname s1 0)))<br \/>\n      (setq d2 (entget (ssname s2 0)))<br \/>\n      (setq pa (cdr (assoc 10 d1)))<br \/>\n      (setq pb (cdr (assoc 11 d1)))<br \/>\n      (setq c0 (cdr (assoc 10 d2)))<br \/>\n      (setq r0 (cdr (assoc 40 d2)))<br \/>\n      (foreach c (CIR:LCR PA PB C0 R0 R1)<br \/>\n        (apply &#8216;Ent:Make_Circle c)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;; A sample for CIR:CCR<br \/>\n;;; CIR:CCR\u6837\u4f8b<br \/>\n(defun C:CCR (\/ s1 r0 d1 d2 c1 c2 r1 r2)<br \/>\n  (prompt &#8220;n\u9009\u62e9\u4e24\u4e2a\u5706&#8221;)<br \/>\n  (setq s1 (ssget  &#8216;((0 . &#8220;CIRCLE,ARC&#8221;))))<br \/>\n  (initget 7)<br \/>\n  (setq r0 (getdist &#8220;n\u534a\u5f84:&#8221;))<br \/>\n  (if (and s1 (&gt;= (sslength s1) 2))<br \/>\n    (progn<br \/>\n      (setq d1 (entget (ssname s1 0)))<br \/>\n      (setq d2 (entget (ssname s1 1)))<br \/>\n      (setq c1 (cdr (assoc 10 d1)))<br \/>\n      (setq r1 (cdr (assoc 40 d1)))<br \/>\n      (setq c2 (cdr (assoc 10 d2)))<br \/>\n      (setq r2 (cdr (assoc 40 d2)))<br \/>\n      (foreach c (CIR:CCR C1 R1 C2 R2 R0)<br \/>\n        (apply &#8216;Ent:Make_Circle c)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;; A sample for CIR:PCR<br \/>\n;;; CIR:PCR\u6837\u4f8b<br \/>\n(defun c:PCR (\/ p0 ss r1 dxf c0 r0)<br \/>\n  (initget 1)<br \/>\n  (setq p0 (getpoint &#8220;n\u70b9:&#8221;))<br \/>\n  (setq p0 (trans p0 1 0))<br \/>\n  (prompt &#8220;n\u9009\u62e9\u5706&#8221;)<br \/>\n  (setq ss (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;CIRCLE,ARC&#8221;))))<br \/>\n  (initget 7)<br \/>\n  (setq r1 (getdist &#8220;n\u534a\u5f84:&#8221;))<br \/>\n  (if (and ss p0 r1)<br \/>\n    (progn<br \/>\n      (setq dxf (entget (ssname ss 0)))<br \/>\n      (setq c0  (cdr (assoc 10 dxf)))<br \/>\n      (setq r0  (cdr (assoc 40 dxf)))<br \/>\n      (Ent:Make_Point P0)<br \/>\n      (foreach c (CIR:PCR P0 C0 R0 R1)<br \/>\n        (apply &#8216;Ent:Make_Circle c)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;Sample<br \/>\n(defun C:CIV (\/ pnt cir dxf rad cen)<br \/>\n  (initget 1)<br \/>\n  (setq pnt (getpoint &#8220;n\u8bf7\u9009\u53d6\u4e00\u70b9:&#8221;))<br \/>\n  (if (setq cir (car (entsel &#8220;n\u9009\u53d6\u5706\u6216\u8005\u5f27:&#8221;)))<br \/>\n    (progn<br \/>\n      (setq dxf (entget cir))<br \/>\n      (setq rad (cdr (assoc 40 dxf)))<br \/>\n      (setq cen (cdr (assoc 10 dxf)))<br \/>\n      (Ent:Make_Point pnt)<br \/>\n      (if (setq pt (CIR:Inversion cen rad pnt))<br \/>\n        (Ent:Make_Point pt)<br \/>\n      )<br \/>\n      (foreach p (CIR:Point_Tangent cen rad pnt)<br \/>\n        (Ent:Make_Point p)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<br \/>\n;;;Sample<br \/>\n(defun C:CLI(\/ ent p1 p2 dxf rad cen ret)<br \/>\n  (setq ent (car (entsel)))<br \/>\n  (setq p1  (getpoint &#8220;nP1:&#8221;))<br \/>\n  (setq p2  (getpoint &#8220;nP2:&#8221;))<br \/>\n  (if (and ent p1 p2)<br \/>\n    (progn<br \/>\n      (setq dxf (entget ent))<br \/>\n      (setq rad (cdr (assoc 40 dxf)))<br \/>\n      (setq cen (cdr (assoc 10 dxf)))<br \/>\n      (setq ret (CIR:Line_Inversion cen rad p1 p2))<br \/>\n      (Ent:Make_Line p1 p2)<br \/>\n      (apply &#8216;Ent:Make_Circle ret)<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;Sample\u5706\u5bf9\u5706\u7684\u53cd\u6f14<br \/>\n(defun C:CCI (\/ e0 e1 d0 d1 r0 r1 c0 c1 ret)<br \/>\n  (setq e0 (car (entsel &#8220;n\u9009\u62e9\u57061:&#8221;)))<br \/>\n  (setq e1 (car (entsel &#8220;n\u9009\u62e9\u57062:&#8221;)))<br \/>\n  (if (and e0 e1)<br \/>\n    (progn<br \/>\n      (setq d0 (entget e0))<br \/>\n      (setq d1 (entget e1))<br \/>\n      (setq r0 (cdr (assoc 40 d0)))<br \/>\n      (setq c0 (cdr (assoc 10 d0)))<br \/>\n      (setq r1 (cdr (assoc 40 d1)))<br \/>\n      (setq c1 (cdr (assoc 10 d1)))<br \/>\n      (setq ret (CIR:Circle_Inversion C0 R0 C1 R1))<br \/>\n      (if (numberp (cadr ret))<br \/>\n        (apply &#8216;Ent:Make_Circle ret)<br \/>\n        (apply &#8216;Ent:Make_Line ret)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;A sample for CIR:Inters_Circle_Circle<br \/>\n;;;\u5706\u5706\u6c42\u4ea4\u70b9<br \/>\n;;;\u6d4b\u8bd5\u4f4d\u4f3c\u4e2d\u5fc3<br \/>\n(defun C:HC (\/ ent1 ent2 dxf1 dxf2 rad1 rad2 cen1 cen2)<br \/>\n  (setq ent1 (car (entsel &#8220;n\u9009\u53d6\u57061:&#8221;)))<br \/>\n  (setq ent2 (car (entsel &#8220;n\u9009\u53d6\u57062:&#8221;)))<br \/>\n  ;(setq pt (getpoint &#8220;n\u70b9\u53d6:&#8221;))<br \/>\n  (if (and ent1 ent2)<br \/>\n    (progn<br \/>\n      (setq dxf1 (entget ent1))<br \/>\n      (setq dxf2 (entget ent2))<br \/>\n      (setq rad1 (cdr (assoc 40 dxf1)))<br \/>\n      (setq rad2 (cdr (assoc 40 dxf2)))<br \/>\n      (setq cen1 (cdr (assoc 10 dxf1)))<br \/>\n      (setq cen2 (cdr (assoc 10 dxf2)))<br \/>\n      (setq i 1)<br \/>\n      ;(Ent:Make_Point pt)<br \/>\n      (setq ret1 (CIR:Radical_Axis cen1 rad1 cen2 rad2))<br \/>\n      (setq ret2 (CIR:Common_Tangent cen1 rad1 cen2 rad2))<br \/>\n      (setq ret3 (CIR:Homothetic_Center cen1 rad1 cen2 rad2))<br \/>\n      (setq ret4 (CIR:Inters_Circle_Circle cen1 rad1 cen2 rad2))<br \/>\n      (setq ret5 (CIR:Circle_Inversion cen1 rad1 cen2 rad2))<br \/>\n      (if (numberp (cadr ret5))<br \/>\n        (apply &#8216;Ent:Make_Circle ret5)<br \/>\n        (apply &#8216;Ent:Make_Line ret5)<br \/>\n      )<br \/>\n      (and ret1 (Ent:Make_point ret1))<br \/>\n      (and ret3 (mapcar &#8216;Ent:make_Point ret3))<br \/>\n      (and ret4 (mapcar &#8216;Ent:make_Point ret4))<br \/>\n      (foreach p ret2<br \/>\n        (apply &#8216;Ent:make_line p)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<br \/>\n;;;\u6d4b\u8bd5\u7a0b\u5e8f<br \/>\n(defun C:PPP (\/ pa pb pc pd ret)<br \/>\n  (initget 1)<br \/>\n  (setq pa (getpoint &#8220;n\u8f93\u5165\u7b2c\u4e00\u70b9:&#8221;))<br \/>\n  (initget 1)<br \/>\n  (setq pb (getpoint &#8220;n\u8f93\u5165\u7b2c\u4e8c\u70b9:&#8221;))<br \/>\n  (initget 1)<br \/>\n  (setq pc (getpoint &#8220;n\u8f93\u5165\u7b2c\u4e09\u70b9:&#8221;))<br \/>\n  (initget 1)<br \/>\n  (setq pd (getpoint &#8220;n\u8f93\u5165\u6620\u5c04\u70b9:&#8221;))<\/p>\n<p>  (Ent:Make_Poly (list pa pb pc))<br \/>\n  (setq InC (Tri:InCenter pa pb pc))<br \/>\n  (setq CCC (CIR:PPP pa pb pc))<br \/>\n  (setq Pd1 (Tri:Isogonal-Conjugate-Point Pd Pa Pb Pc))<br \/>\n  (setq Otc (tri:OrthoCenter pa pb pc))<br \/>\n  (setq 9pc (Tri:9P_Circle pa pb pc))<br \/>\n  (mapcar &#8216;Ent:Make_Point (list pa pb pc pd Pd1 Otc))<br \/>\n  (foreach n (list Inc CCC 9pc)<br \/>\n    (apply &#8216;Ent:Make_Circle n)<br \/>\n  )<br \/>\n  (princ)<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u70b9\u70b9\u7ebf<br \/>\n(defun c:PPL(\/ p1 p2 ln dxf pa pb ret)<br \/>\n  (setq p1 (getpoint &#8220;n\u7b2c\u4e00\u70b9:&#8221;))<br \/>\n  (setq p2 (getpoint &#8220;n\u7b2c\u4e8c\u70b9:&#8221;))<br \/>\n  (setq ln (car (entsel &#8220;n\u8bf7\u9009\u62e9\u7ebf\u6bb5&#8221;)))<br \/>\n  (if (and p1 p2 ln)<br \/>\n    (progn<br \/>\n      (setq dxf (entget ln))<br \/>\n      (setq ptA (cdr (assoc 10 dxf)))<br \/>\n      (setq ptb (cdr (assoc 11 dxf)))<br \/>\n      (setq ret (CIR:PPL p1 p2 PtA PtB))<br \/>\n      (Ent:Make_Line p1 p2)<br \/>\n      (if (VL-CONSP ret)<br \/>\n        (foreach n ret<br \/>\n          (and n (apply &#8216;Ent:Make_Circle n))<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u70b9\u7ebf\u7ebf\u5706<br \/>\n(defun C:PLL(\/ pt l1 l2 d1 d2 pa pb pc pd)<br \/>\n  (setq pt (getpoint &#8220;n\u9009\u62e9\u70b9:&#8221;))<br \/>\n  (setq l1 (car (entsel &#8220;n\u8bf7\u9009\u62e9\u7ebf\u6bb5&#8221;)))<br \/>\n  (setq l2 (car (entsel &#8220;n\u8bf7\u9009\u62e9\u7ebf\u6bb5&#8221;)))<br \/>\n  (if (and pt l1 l2)<br \/>\n    (progn<br \/>\n      (setq d1 (entget l1))<br \/>\n      (setq d2 (entget l2))<br \/>\n      (setq pa (cdr (assoc 10 d1)))<br \/>\n      (setq pb (cdr (assoc 11 d1)))<br \/>\n      (setq pc (cdr (assoc 10 d2)))<br \/>\n      (setq pd (cdr (assoc 11 d2)))<br \/>\n      (Ent:Make_Point pt)<br \/>\n      (setq ret (CIR:PLL pt pa pb Pc Pd))<br \/>\n      (if (VL-CONSP ret)<br \/>\n        (foreach n ret<br \/>\n          (and n (Ent:Make_Circle (car n) (cadr n)))<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u70b9\u5207\u5207\u5706<br \/>\n(defun C:PCC(\/ pt e1 e2 d1 d2 r1 r2 rt)<br \/>\n  (initget 1)<br \/>\n  (setq pt (getPoint &#8220;n\u70b91\uff1a&#8221;))<br \/>\n  (setq e1 (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;CIRCLE,ARC&#8221;))))<br \/>\n  (setq e2 (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;CIRCLE,ARC&#8221;))))<br \/>\n  (if (and pt e1 e2)<br \/>\n    (progn<br \/>\n      (setq d1 (entget (ssname e1 0)))<br \/>\n      (setq d2 (entget (ssname e2 0)))<br \/>\n      (setq r1 (cdr (assoc 40 d1)))<br \/>\n      (setq r2 (cdr (assoc 40 d2)))<br \/>\n      (setq c1 (cdr (assoc 10 d1)))<br \/>\n      (setq c2 (cdr (assoc 10 d2)))<br \/>\n      (setq rt (CIR:PCC pt c1 r1 c2 r2))<br \/>\n      (Ent:Make_Point pt)<br \/>\n      (if rt<br \/>\n        (foreach n rt<br \/>\n          (apply &#8216;Ent:Make_Circle n)<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u70b9\u70b9\u7ebf\u5706<br \/>\n(defun C:PPC(\/ p1 p2 en dxf rad cen ret)<br \/>\n  (initget 1)<br \/>\n  (setq p1 (getPoint &#8220;n\u70b91\uff1a&#8221;))<br \/>\n  (initget 1)<br \/>\n  (setq p2 (getPoint &#8220;n\u70b92\uff1a&#8221;))<br \/>\n  (setq en (car (entsel &#8220;n\u9009\u4e00\u4e2a\u5706\uff1a&#8221;)))<br \/>\n  (if (and p1 p2 en)<br \/>\n    (progn<br \/>\n      (setq dxf (entget en))<br \/>\n      (setq rad (cdr (assoc 40 dxf)))<br \/>\n      (setq cen (cdr (assoc 10 dxf)))<br \/>\n      (setq ret (CIR:PPC p1 p2 cen rad))<br \/>\n      (Ent:Make_Point p1)<br \/>\n      (Ent:Make_Point p2)<br \/>\n      (if ret<br \/>\n        (foreach n ret<br \/>\n          (apply &#8216;Ent:Make_Circle n)<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u4e0e\u4e09\u5706\u90fd\u76f8\u5207\u7684\u5706(\u5373\u963f\u6ce2\u7f57\u5c3c\u65af\u5706)\u51fd\u6570<br \/>\n(defun c:rax (\/ e1 e2 e3 d1 d2 d3 c1 c2 c3 r1 r2 r3)<br \/>\n  (setq e1 (car (entsel &#8220;n\u57061:&#8221;)))<br \/>\n  (setq e2 (car (entsel &#8220;n\u57062:&#8221;)))<br \/>\n  (setq e3 (car (entsel &#8220;n\u57063:&#8221;)))<br \/>\n  (if (and e1 e2 e3)<br \/>\n    (progn<br \/>\n      (setq d1  (entget e1))<br \/>\n      (setq d2  (entget e2))<br \/>\n      (setq d3  (entget e3))<br \/>\n      (setq r1  (cdr (assoc 40 d1))<br \/>\n            r2  (cdr (assoc 40 d2))<br \/>\n            r3  (cdr (assoc 40 d3))<br \/>\n            c1  (cdr (assoc 10 d1))<br \/>\n            c2  (cdr (assoc 10 d2))<br \/>\n            c3  (cdr (assoc 10 d3))<br \/>\n      )<br \/>\n      (command &#8220;undo&#8221; &#8220;be&#8221;)<br \/>\n      (vla-put-color (vlax-ename-&gt;vla-object e1) 1)<br \/>\n      (vla-put-color (vlax-ename-&gt;vla-object e2) 2)<br \/>\n      (vla-put-color (vlax-ename-&gt;vla-object e3) 3)<br \/>\n      (MiSC:test<br \/>\n        100<br \/>\n        &#8216;((CIR:CCC c1 r1 c2 r2 c3 r3)<br \/>\n          (CIR:CCC_1 c1 r1 c2 r2 c3 r3)<br \/>\n        )<br \/>\n      )<br \/>\n      (foreach p (CIR:CCC c1 r1 c2 r2 c3 r3)<br \/>\n        (and p (apply &#8216;Ent:Make_Circle p))<br \/>\n      )<br \/>\n      (command &#8220;undo&#8221; &#8220;e&#8221;)<br \/>\n      (princ)<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u70b9\u5207\u5207\u5706<br \/>\n(defun C:PLC(\/ pt e1 e2 d1 d2 r1 r2 ret)<br \/>\n  (initget 1)<br \/>\n  (setq pt0 (getPoint &#8220;nPoint:&#8221;))<br \/>\n  (princ &#8220;nSelect a line:&#8221;)<br \/>\n  (setq en1 (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n  (princ &#8220;nSelect a circle:&#8221;)<br \/>\n  (setq en2 (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;CIRCLE&#8221;))))<br \/>\n  (if (and pt0 en1 en2)<br \/>\n    (progn<br \/>\n      (setq d1  (entget (ssname en1 0)))<br \/>\n      (setq d2  (entget (ssname en2 0)))<br \/>\n      (setq ptA (cdr (assoc 10 d1)))<br \/>\n      (setq ptB (cdr (assoc 11 d1)))<br \/>\n      (setq rad (cdr (assoc 40 d2)))<br \/>\n      (setq cen (cdr (assoc 10 d2)))<br \/>\n      (Ent:Make_Point pt0)<br \/>\n      (setq ret (CIR:PLC pt0 ptA ptB Cen Rad))<br \/>\n      (foreach n ret<br \/>\n        (apply &#8216;Ent:Make_Circle n)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u6781\u70b9\u548c\u6781\u7ebf\u7684\u6837\u4f8b<br \/>\n(defun C:RAL(\/ e1 e2 d1 d1 c r f p1 p2 rt)<br \/>\n  (setq e1 (car (entsel &#8220;n\u7ebf:&#8221;)))<br \/>\n  (setq e2 (car (entsel &#8220;n\u5706:&#8221;)))<br \/>\n  (if (and e1 e2)<br \/>\n    (progn<br \/>\n      (setq d1 (entget e1))<br \/>\n      (setq d2 (entget e2))<br \/>\n      (setq C  (cdr (assoc 10 d2)))<br \/>\n      (setq r  (cdr (assoc 40 d2)))<br \/>\n      (setq p1 (cdr (assoc 10 d1)))<br \/>\n      (setq p2 (cdr (assoc 11 d1)))<br \/>\n      (setq f  (Line:Equation p1 p2))<br \/>\n      (setq rt (CIR:Polar_Point c r (car f) (cadr f) (caddr f)))<br \/>\n      (and rt (Ent:Make_Point rt))<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;\u6d4b\u8bd5\u4e09\u7ebf\u5207\u5706\u51fd\u6570<br \/>\n(defun c:LLL(\/ e1 e2 e3 d1 d2 d3 p1 p2 p3 p4 p5 p6 ret)<br \/>\n  (prompt &#8220;n\u8bf7\u9009\u62e9\u4e09\u6761\u76f4\u7ebf:&#8221;)<br \/>\n  (if (and (setq ss (ssget &#8216;((0 . &#8220;LINE&#8221;))))<br \/>\n           (&gt;= (sslength ss) 3)<br \/>\n      )<br \/>\n    (progn<br \/>\n      (setq e1 (ssname ss 0))<br \/>\n      (setq e2 (ssname ss 1))<br \/>\n      (setq e3 (ssname ss 2))<br \/>\n      (setq d1 (entget e1))<br \/>\n      (setq d2 (entget e2))<br \/>\n      (setq d3 (entget e3))<br \/>\n      (setq p1 (cdr (assoc 10 d1)))<br \/>\n      (setq p2 (cdr (assoc 11 d1)))<br \/>\n      (setq p3 (cdr (assoc 10 d2)))<br \/>\n      (setq p4 (cdr (assoc 11 d2)))<br \/>\n      (setq p5 (cdr (assoc 10 d3)))<br \/>\n      (setq p6 (cdr (assoc 11 d3)))<br \/>\n      (setq ret (CIR:LLL p1 p2 p3 p4 p5 p6))<br \/>\n      (foreach n ret<br \/>\n        (apply &#8216;Ent:Make_Circle n)<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;<br \/>\n;;;\u7a0b\u5e8f\u7ed3\u5c3e                                            ;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;|;<br \/>\n[\/codesyntax]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5bf9CAD\u4e2d\u5706\u548c\u5f27\u7684\u7814\u7a76\u3002\u5305\u62ec\u5982\u4e0b\u5185\u5bb9\uff1a \u5706\u548c\u5f27\u7684\u57fa\u672c\u8981\u7d20\uff0c\u5706\u7684\u548c\u5f27\u7684\u5468\u957f \uff0c\u9762\u79ef\uff0c\u8d28\u5fc3\uff1b \u5b83\u4eec\u7684\u79cd\u79cd\u4f5c\u56fe\u6cd5\uff0c\u8b6c<\/p>\n<p class=\"more-link\"><a href=\"https:\/\/www.highflybird.com\/blog\/?p=1297\" class=\"themebutton2\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[9],"tags":[19],"class_list":["post-1297","post","type-post","status-publish","format-standard","hentry","category-programming","tag-19"],"_links":{"self":[{"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1297","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1297"}],"version-history":[{"count":0,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1297\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1297"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}