{"id":1296,"date":"2012-12-13T19:51:50","date_gmt":"2012-12-13T11:51:50","guid":{"rendered":"https:\/\/www.highflybird.com\/blog\/?p=141"},"modified":"2012-12-13T19:51:50","modified_gmt":"2012-12-13T11:51:50","slug":"%e7%9f%a9%e9%98%b5%e8%ae%ba","status":"publish","type":"post","link":"https:\/\/www.highflybird.com\/blog\/?p=1296","title":{"rendered":"\u77e9\u9635\u8bba"},"content":{"rendered":"<p>\u5bf9CAD\u4e2d\u77e9\u9635\u53ca\u5176\u76f8\u5173\u77e5\u8bc6\u7684\u7814\u7a76.<br \/>\n\u5305\u62ec\u4e86\u7ebf\u6027\u4ee3\u6570\u7684\u4e00\u4e9b\u57fa\u672c\u77e5\u8bc6\uff1b<br \/>\n\u77e9\u9635\u7684\u57fa\u672c\u8fd0\u7b97\uff1b<br \/>\n\u77e9\u9635\u7684\u57fa\u672c\u53d8\u6362\uff1b<br \/>\n\u5b9e\u4f53\u7684\u77e9\u9635\u53ca\u5176\u53d8\u6362\uff1b<br \/>\n\u65b9\u7a0b\u6c42\u89e3\u548c\u77e9\u9635\u7684\u6c42\u9006\u3001\u77e9\u9635\u7684\u7279\u5f81\u89e3\uff1b<br \/>\n\u7b49\u7b49\u3002<\/p>\n<p>\u4e0b\u9762\u662f\u5176\u5b9e\u73b0\u7684\u76f8\u5173\u4ee3\u7801\uff1a<br \/>\n<!--more--><br \/>\n[codesyntax lang=&#8221;lisp&#8221;]<br \/>\n;|*********************************************************************************************;<br \/>\n\u8f6f\u4ef6\u4f5c\u8005: Highflybird                                                                          ;<br \/>\n\u8f6f\u4ef6\u7528\u9014: \u4e3aAutoCAD \u7684LISP\u5b9a\u5236\u7684\u4e00\u4e9b\u7b97\u6cd5\u548c\u51fd\u6570                                                 ;<br \/>\n\u65e5\u671f\u5730\u70b9: 2012.12.12 \u6df1\u5733                                                                      ;<br \/>\n\u7a0b\u5e8f\u8bed\u8a00: AutoLISP,Visual LISP                                                                 ;<br \/>\n\u7248\u672c\u53f7:   Ver. 1.0.121212                                                                      ;<br \/>\n**********************************************************************************************|;<br \/>\n(setq MatLibSymbols<br \/>\n       &#8216;(MAT:v+v           MAT:v-v           MAT:v*v<br \/>\n         MAT:v\/v           MAT:vxs           MAT:Dot<br \/>\n         MAT:vxv           MAT:SxVs          MAT:norm<br \/>\n         MAT:Norm3D        MAT:Unitization   MAT:unit<br \/>\n         MAT:Det2          MAT:Det3          MAT:Det2V<br \/>\n         MAT:Rot90         MAT:Rot2D         MAT:TransU2W<br \/>\n         MAT:TransW2U      MAT:trp           MAT:mxv<br \/>\n         MAT:mxp           MAT:mxs           MAT:m+m<br \/>\n         MAT:m-m           MAT:mxm           MAT:Translation<br \/>\n         MAT:TranslateBy2P MAT:Scaling       MAT:Rotation<br \/>\n         MAT:Rotation3D    MAT:RotateBy2P    MAT:Reflect<br \/>\n         MAT:Reflect3D     MAT:TransNested   MAT:RefGeom<br \/>\n         MAT:RevRefGeom    MAT:AttGeom       Mat:DispToMatrix<br \/>\n         MAT:Trans         MAT:u2w           MAT:w2u<br \/>\n         MAT:Align         MAT:2VMatrix      Mat:3PMatrix<br \/>\n         Mat:EntityMatrix  MAT:ISO           Mat:OcsMatrix<br \/>\n         MAT:TransList     Mat:3VLE          Mat:Detm<br \/>\n         Mat:3dPolarArray  Mat:Normal_Origin LM:ReflectByMatrix<br \/>\n         LM:Rotate3D       LM:Reflect3D      LM:TranslateByMatrix<br \/>\n         LM:RotateByMatrix LM:ScaleByMatrix  LM:ApplyMatrixTransformation<br \/>\n        )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;\u7b26\u53f7\u4fdd\u62a4                                                   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun protect-assign (syms)<br \/>\n  (eval (list &#8216;pragma<br \/>\n              (list &#8216;quote (list (cons &#8216;protect-assign syms)))<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;&#8212;&#8212;&#8211;;;<br \/>\n;;;\u7b26\u53f7\u89e3\u9664\u4fdd\u62a4                                               ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun unprotect-assign (syms)<br \/>\n  (eval<br \/>\n    (list &#8216;pragma<br \/>\n          (list &#8216;quote (list (cons &#8216;unprotect-assign syms)))<br \/>\n    )<br \/>\n  )<br \/>\n)<br \/>\n(unProtect-assign MatLibSymbols)<\/p>\n<p>;;;***********************************************************;;<br \/>\n;;; \u77e9\u9635\u90e8\u5206                                                  ;;<br \/>\n;;;***********************************************************;;<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e24\u5411\u91cf\u76f8\u52a0 addition                                       ;;<br \/>\n;;; Input: v1,v2 -vectors in R^n                              ;;<br \/>\n;;; OutPut: A vector                                          ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:v+v (v1 v2)<br \/>\n  (mapcar &#8216;+ v1 v2)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e24\u5411\u91cf\u76f8\u51cf  subtraction                                   ;;<br \/>\n;;; Input: v1,v2 -vectors in R^n                              ;;<br \/>\n;;; OutPut: A vector                                          ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:v-v (v1 v2)<br \/>\n  (mapcar &#8216;- v1 v2)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e24\u5411\u91cf\u76f8\u4e58  multiplication                                ;;<br \/>\n;;; Input: v1,v2 -vectors in R^n                              ;;<br \/>\n;;; OutPut: A vector                                          ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:v*v (v1 v2)<br \/>\n  (mapcar &#8216;* v1 v2)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e24\u5411\u91cf\u76f8\u9664  division                                      ;;<br \/>\n;;; Input: v1,v2 -vectors in R^n                              ;;<br \/>\n;;; OutPut: A vector                                          ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:v\/v (v1 v2)<br \/>\n  (mapcar &#8216;\/ v1 v2)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5411\u91cf\u4e58\u6807\u91cf(\u7cfb\u6570)                                          ;;<br \/>\n;;; Vector x Scalar &#8211; Lee Mac                                 ;;<br \/>\n;;; Args: v &#8211; vector in R^n, s &#8211; real scalar                  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:vxs ( v s )<br \/>\n  (mapcar (function (lambda ( n ) (* n s))) v)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5411\u91cf\u9664\u4ee5\u6807\u91cf(\u7cfb\u6570)                                        ;;<br \/>\n;;; Vector x Scalar &#8211; Lee Mac                                 ;;<br \/>\n;;; Args: v &#8211; vector in R^n, s &#8211; real scalar                  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:v\/s ( v s )<br \/>\n  (if (not (zerop s))<br \/>\n    (mat:vxs v (\/ 1.0 s))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e24\u5411\u91cf\u7684\u70b9\u79ef                                              ;;<br \/>\n;;; Vector Dot Product                                        ;;<br \/>\n;;; Input: v1,v2 -vectors in R^n                              ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Dot (v1 v2)<br \/>\n  (apply &#8216;+ (mapcar &#8216;* v1 v2))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e24\u5411\u91cf\u7684\u53c9\u79ef                                              ;;<br \/>\n;;; Vector Cross Product                                      ;;<br \/>\n;;; Args: u,v &#8211; vectors in R^3                                ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:vxv ( u v )<br \/>\n  (list<br \/>\n    (- (* (cadr u) (caddr v)) (* (cadr v) (caddr u)))<br \/>\n    (- (* (car  v) (caddr u)) (* (car  u) (caddr v)))<br \/>\n    (- (* (car  u) (cadr  v)) (* (car  v) (cadr  u)))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u7ebf\u6027\u7ec4\u5408  \u6807\u91cf\u7ec4\u4e58\u5411\u91cf\u7ec4                                  ;;<br \/>\n;;; Linear combination &#8211; highflybird                          ;;<br \/>\n;;; Input: Vectors &#8211; vectors, Scalars, &#8211; a real number list   ;;<br \/>\n;;; Output: a vector                                          ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:SxVs (Vectors Scalars)<br \/>\n  (apply &#8216;mapcar (cons &#8216;+ (mapcar &#8216;MAT:vxs Vectors Scalars)))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5411\u91cf\u7684\u6a21(\u957f\u5ea6)                                            ;;<br \/>\n;;; Vector Norm &#8211; Lee Mac                                     ;;<br \/>\n;;; Args: v &#8211; vector in R^n                                   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:norm ( v )<br \/>\n  (sqrt (apply &#8216;+ (mapcar &#8216;* v v)))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5411\u91cf\u7684\u6a21(\u957f\u5ea6)                                            ;;<br \/>\n;;; Vector Norm &#8211; highflybird                                 ;;<br \/>\n;;; Args: v &#8211; vector in R^3                                   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Norm3D ( v )<br \/>\n  (distance &#8216;(0 0 0) v)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5355\u4f4d\u5411\u91cf                                                  ;;<br \/>\n;;; Unit Vector &#8211; Lee Mac                                     ;;<br \/>\n;;; Args: v &#8211; vector in R^n                                   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Unitization (v)<br \/>\n  ( (lambda (n)<br \/>\n      (if (equal 0.0 n 1e-14)<br \/>\n        nil<br \/>\n        (MAT:vxs v (\/ 1.0 n))<br \/>\n      )<br \/>\n    )<br \/>\n    (MAT:norm v)<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5355\u4f4d\u5411\u91cf                                                  ;;<br \/>\n;;; Unit Vector &#8211; highflybird                                 ;;<br \/>\n;;; Args: v &#8211; vector in R^3                                   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:unit ( v \/ l)<br \/>\n  (cond<br \/>\n    ( (= (setq l (distance &#8216;(0 0 0) v)) 1.0 ) v)<br \/>\n    ( (&gt; l 1e-14) (mapcar &#8216;\/ v (list l l l)))<br \/>\n  )<br \/>\n)                   <\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e24\u4e2a2d\u5411\u91cf\u7684\u53c9\u79ef\u7684\u6570\u503c                                    ;;<br \/>\n;;; \u8f93\u5165: \u4e24\u4e2a\u70b9\uff08\u6216\u8005\u4e24\u4e2a\u5411\u91cf\uff09                              ;;<br \/>\n;;; \u8f93\u51fa: \u4e00\u4e2a\u6570\u503c.\u5982\u679c\u4e3a\u6b63\u5219\u662f\u9006\u65f6\u9488,\u4e24\u5411\u91cf\u5f62\u6210\u7684\u5e73\u9762\u6cd5\u7ebf\u5411\u91cf;;<br \/>\n;;;       \u5411\u4e0a\uff0c\u4e3a\u8d1f\u5219\u662f\u987a\u65f6\u9488\uff0c\u4e3a\u96f6\u5219\u4e24\u5411\u91cf\u5171\u7ebf\u6216\u5e73\u884c\u3002      ;;<br \/>\n;;;       \u8fd9\u4e2a\u6570\u503c\u4e5f\u4e3a\u539f\u70b9,P1,P2\u4e09\u70b9\u9762\u79ef\u7684\u4e24\u500d\u3002              ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Det2V (v1 v2)<br \/>\n  (- (* (car v1) (cadr v2)) (* (car v2) (cadr v1)))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; 2d\u884c\u5217\u5f0f determinant in R^2                               ;;<br \/>\n;;; Args: 4 numbers                                           ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Det2 (x1 y1 x2 y2)<br \/>\n  (- (* x1 y2) (* x2 y1))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; 3d\u884c\u5217\u5f0f  determinant in R^3                              ;;<br \/>\n;;; Args: 9 numbers                                           ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Det3 (a1 b1 c1 a2 b2 c2 a3 b3 c3)<br \/>\n  (+ (* a1 (- (* b2 c3) (* b3 c2)))<br \/>\n     (* a2 (- (* b3 c1) (* b1 c3)))<br \/>\n     (* a3 (- (* b1 c2) (* b2 c1)))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; n\u9636\u884c\u5217\u5f0f  determinant in R^n                             ;;<br \/>\n;;; Args: n*n \u77e9\u9635                                            ;;<br \/>\n;;; Matrix Determinant  &#8211;  ElpanovEvgeniy                     ;;<br \/>\n;;; Last edit 2013.11.13                                      ;;<br \/>\n;;; Args: m &#8211; nxn matrix                                      ;;<br \/>\n;;; (mat:detm &#8216;((0 1) (1 0)))                                 ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun mat:detm (m \/ r i)<br \/>\n  (cond<br \/>\n    ((null m) 1)<br \/>\n    ((and<br \/>\n       (zerop (setq i (caar m)))<br \/>\n       (setq r (car (vl-member-if-not<br \/>\n                      (function (lambda (a) (zerop (car a))))<br \/>\n                      (cdr m)<br \/>\n                    )<br \/>\n               )<br \/>\n       )<br \/>\n     )<br \/>\n     (mat:detm (cons (mapcar &#8216;+ (car m) r) (cdr m)))<br \/>\n    )<br \/>\n    ((zerop i) 0)<br \/>\n    ((setq i (float i))<br \/>\n     (setq r (cdar m))<br \/>\n     (* i<br \/>\n        (mat:detm<br \/>\n          (mapcar<br \/>\n            (function<br \/>\n              (lambda (a \/ d)<br \/>\n                (setq d (\/ (car a) i))<br \/>\n                (mapcar<br \/>\n                  (function (lambda (b c) (- b (* c d))))<br \/>\n                  (cdr a)<br \/>\n                  r<br \/>\n                )<br \/>\n              )<br \/>\n            )<br \/>\n            (cdr m)<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;=====================================================<br \/>\n;;;\u4e09\u5143\u4e00\u6b21\u65b9\u7a0b\u7ec4\u7684\u89e3<br \/>\n;;;The solution of a Three-variable linear equations<br \/>\n;;;=====================================================<br \/>\n(defun Mat:3VLE (a b c d e f g h i j k l \/ d1)<br \/>\n  (setq d1 (float (Mat:DET3 a b c d e f g h i)))<br \/>\n  (if (\/= d1 0.0)<br \/>\n    (list<br \/>\n      (\/ (Mat:DET3 j b c k e f l h i) d1)<br \/>\n      (\/ (Mat:DET3 a j c d k f g l i) d1)<br \/>\n      (\/ (Mat:DET3 a b j d e k g h l) d1)<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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u65cb\u8f6c\u4e00\u4e2a\u5411\u91cf\u6216\u8005\u70b990\u5ea6                                    ;;<br \/>\n;;; \u8f93\u5165: \u4e00\u4e2a\u5411\u91cf                                            ;;<br \/>\n;;; \u8f93\u51fa: \u88ab\u65cb\u8f6c90\u5ea6\u540e\u7684\u5411\u91cf                                  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Rot90 (vec)<br \/>\n  (vl-list* (- (cadr vec)) (car vec) (cddr vec))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u65cb\u8f6c\u5411\u91cf\u5230\u6307\u5b9a\u89d2\u5ea6                                        ;;<br \/>\n;;; \u8f93\u5165: \u4e00\u4e2a\u5411\u91cf\u548c\u6307\u5b9a\u7684\u89d2\u5ea6                                ;;<br \/>\n;;; \u8f93\u51fa: \u88ab\u65cb\u8f6c\u540e\u7684\u5411\u91cf                                      ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Rot2D (v a \/ c s x y)<br \/>\n  (setq c (cos a) s (sin a))<br \/>\n  (setq x (car v) y (cadr v))<br \/>\n  (list (- (* x c) (* y s)) (+ (* x s) (* y c)))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u77e9\u9635\u8f6c\u7f6e                                                  ;;<br \/>\n;;; MAT:trp Transpose a matrix -Doug Wilson-                  ;;<br \/>\n;;; \u8f93\u5165\uff1a\u77e9\u9635                                                ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u8f6c\u7f6e\u540e\u7684\u77e9\u9635                                        ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:trp (m)<br \/>\n  (apply &#8216;mapcar (cons &#8216;list m))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u77e9\u9635\u76f8\u52a0                                                  ;;<br \/>\n;;; Matrix + Matrix &#8211; Lee Mac                                 ;;<br \/>\n;;; Args: m,n &#8211; nxn matrices                                  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:m+m ( m n )<br \/>\n  (mapcar &#8216;(lambda ( r s ) (mapcar &#8216;+ r s)) m n)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u77e9\u9635\u76f8\u51cf                                                  ;;<br \/>\n;;; Matrix &#8211; Matrix &#8211; Lee Mac                                 ;;<br \/>\n;;; Args: m,n &#8211; nxn matrices                                  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:m-m ( m n )<br \/>\n  (mapcar &#8216;(lambda ( r s ) (mapcar &#8216;- r s)) m n)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u77e9\u9635\u76f8\u4e58                                                  ;;<br \/>\n;;; MAT:mxm Multiply two matrices -Vladimir Nesterovsky-      ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:mxm (m q)<br \/>\n  (mapcar (function (lambda (r) (MAT:mxv (MAT:trp q) r))) m)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5411\u91cf\u6216\u70b9\u7684\u77e9\u9635\u53d8\u6362(\u5411\u91cf\u4e58\u77e9\u9635)                            ;;<br \/>\n;;; Matrix x Vector &#8211; Vladimir Nesterovsky                    ;;<br \/>\n;;; Args: m &#8211; nxn matrix, v &#8211; vector in R^n                   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:mxv (m v)<br \/>\n  (mapcar (function (lambda (r) (apply &#8216;+ (mapcar &#8216;* r v)))) m)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u70b9\u7684\u77e9\u9635(4&#215;4 matrix) \u53d8\u6362                                 ;;<br \/>\n;;; \u8f93\u5165\uff1a\u77e9\u9635m\u548c\u4e00\u4e2a\u4e09\u7ef4\u70b9p                                  ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u70b9\u53d8\u6362\u540e\u7684\u4f4d\u7f6e                                      ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:mxp (m p)<br \/>\n  (reverse (cdr (reverse (MAT:mxv m (append p &#8216;(1.0))))))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u77e9\u9635\u4e58\u6807\u91cf                                                ;;<br \/>\n;;; Matrix x Scalar &#8211; Lee Mac                                 ;;<br \/>\n;;; Args: m &#8211; nxn matrix, n &#8211; real scalar                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:mxs ( m s )<br \/>\n  (mapcar (function (lambda ( v )(MAT:VxS v s))) m)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;\u9ad8\u65af\u6d88\u5143\u6cd5\u4e4b\u77e9\u9635\u5206\u89e3                                       ;;<br \/>\n;;;Mat:Gauss_Elimination, use Safearray to express a matrix   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Mat:Gauss_Elimination (m \/ r v i a)<br \/>\n  (if (car m)<br \/>\n    (progn<br \/>\n      (setq v (mapcar (function (lambda (x) (abs (car x)))) m)) ;\u9996\u5217\u7684\u7edd\u5bf9\u503c<br \/>\n      (setq i (vl-position (apply &#8216;max v) v))                   ;\u5176\u6700\u5927\u503c\u6240\u5728\u7684\u884c\u53f7<br \/>\n      (setq r (nth i m))                                        ;\u5f97\u5230\u7edd\u5bf9\u503c\u7684\u6700\u5927\u503c\u6240\u5728\u7684\u884c<br \/>\n      (setq a (float (car r)))                                  ;\u9700\u8f6c\u5316\u4e3a\u6d6e\u70b9\u6570\uff0c\u9632\u6b62\u6574\u9664<br \/>\n      (if (equal a 0 1e-14)<br \/>\n        (Mat:Gauss_Elimination (mapcar &#8216;cdr m))                 ;\u53bb\u6389\u5168\u90e8\u4e3a\u96f6\u7684\u5217<br \/>\n        (progn<br \/>\n          (setq m (vl-remove r m))                              ;\u53bb\u6389\u76f8\u540c\u7684\u884c<br \/>\n          (setq r (mat:vxs r (\/ 1.0 a)))                        ;\u5f52\u4e00\u5316<br \/>\n          (setq m<br \/>\n            (mapcar<br \/>\n              (function<br \/>\n                (lambda (z)<br \/>\n                  (mapcar<br \/>\n                    (function<br \/>\n                      (lambda (x y)<br \/>\n                        (- x (* (car z) y))                     ;\u6d88\u5143<br \/>\n                      )<br \/>\n                    )<br \/>\n                    z<br \/>\n                    r<br \/>\n                  )<br \/>\n                )<br \/>\n              )<br \/>\n              m<br \/>\n            )<br \/>\n          )<br \/>\n          (cons r (Mat:Gauss_Elimination (mapcar &#8216;cdr m)))<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;&#8212;&#8212;&#8211;;;<br \/>\n;;;LU\u4e09\u89d2\u5f62\u5206\u89e3\uff0c\u6ca1\u8003\u8651\u9664\u96f6\u60c5\u51b5                               ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Mat:LUDcmp (mat \/ A I J K M N SUM)<br \/>\n  (setq m (length mat))<br \/>\n  (setq n (length (car mat)))<br \/>\n  (setq a (vlax-make-safearray 5 (cons 0 (1- m)) (cons 0 (1- n))))<br \/>\n  (vlax-safearray-fill a mat)<\/p>\n<p>  (setq j 0)<br \/>\n  (repeat n<br \/>\n    (setq i 0)<br \/>\n    (repeat m<br \/>\n      (if (&lt;= i j)<br \/>\n        (progn<br \/>\n          (setq sum 0)<br \/>\n          (setq k 0)<br \/>\n          (repeat i<br \/>\n            (setq sum (+ sum (* (vlax-safearray-get-element a i k) (vlax-safearray-get-element a k j))))<br \/>\n            (setq k (1+ k))<br \/>\n          )<br \/>\n          (vlax-safearray-put-element a i j (- (vlax-safearray-get-element a i j) sum))<br \/>\n        )<br \/>\n        (progn<br \/>\n          (setq sum 0)<br \/>\n          (setq k 0)<br \/>\n          (repeat j<br \/>\n            (setq sum (+ sum (* (vlax-safearray-get-element a i k) (vlax-safearray-get-element a k j))))<br \/>\n            (setq k (1+ k))<br \/>\n          )<br \/>\n          (vlax-safearray-put-element a i j<br \/>\n            (\/ (- (vlax-safearray-get-element a i j) sum) (float (vlax-safearray-get-element a j j)))<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n      (setq i (1+ i))<br \/>\n    )<br \/>\n    (setq j (1+ j))<br \/>\n  )<br \/>\n  (vlax-safearray-&gt;list a)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;\u4ece\u9ad8\u65af\u6d88\u5143\u6cd5\u5f97\u5230\u7684\u4e09\u89d2\u5f62\u77e9\u9635\u56de\u4ee3\u89e3\u65b9\u7a0b                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Mat:TriangularForm (m \/ I L R X Y Z)<br \/>\n  (if (= (- (length (car m)) (length m)) 1)<br \/>\n    (progn<br \/>\n      (setq m (mapcar &#8216;reverse (reverse m)))<br \/>\n      (setq i 1)<br \/>\n      (setq L (cons (caar m) L))<br \/>\n      (while (setq m (cdr m))<br \/>\n        (setq r (car m))<br \/>\n        (setq y 0)<br \/>\n        (setq z (reverse L))<br \/>\n        (repeat i<br \/>\n          (setq r (cdr r))<br \/>\n          (setq x (car r))<br \/>\n          (setq y (+ y (* x (car z))))<br \/>\n          (setq z (cdr z))<br \/>\n        )<br \/>\n        (setq y (- (caar m) y))<br \/>\n        (setq L (cons y L))<br \/>\n        (setq i (1+ i))<br \/>\n      )<br \/>\n      L<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;&#8212;&#8212;&#8211;;;<br \/>\n;;;\u89e3\u4e00\u6b21\u65b9\u7a0b\u7ec4                                               ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Mat:Gauss_Equations (mat)<br \/>\n  (Mat:TriangularForm (Mat:Gauss_Elimination mat))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;\u9a8c\u8bc1\u89e3                                                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Mat:Verify (mat ans fuzz)<br \/>\n  (equal (mat:mxv mat ans) (mapcar &#8216;last mat) fuzz)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;\u968f\u673a\u51fd\u6570                                                   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Misc:Rand (nMin nMax \/ seed)<br \/>\n  (setq seed (getvar &#8220;USERR4&#8221;))<br \/>\n  (if (= seed 0.)<br \/>\n    (setq seed (getvar &#8220;TDUSRTIMER&#8221;)<br \/>\n          seed (- seed (fix seed))<br \/>\n          seed (rem (* seed 86400) 1)<br \/>\n    )<br \/>\n  )<br \/>\n  (setq seed (rem (+ (* seed 15625.7) 0.21137152) 1))<br \/>\n  (setvar &#8220;USERR4&#8221; seed)<br \/>\n  (+ nMin (* seed (- nMax nMin)))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;\u968f\u673a\u77e9\u9635                                                   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Mat:RandomMatrix (len imax \/ m n)<br \/>\n  (repeat len<br \/>\n    (setq n nil)<br \/>\n    (repeat (1+ len)<br \/>\n      (setq n (cons (Misc:Rand (- imax) imax) n))<br \/>\n    )<br \/>\n    (setq m (cons n m))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;***********************************************************;;<br \/>\n;;;\u77e9\u9635\u4e4b\u53d8\u6362\u90e8\u5206                                             ;;<br \/>\n;;;***********************************************************;;<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5e73\u79fb\u53d8\u6362\u77e9\u9635\u65b9\u5f0f1                                         ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; v &#8211; \u4f4d\u79fb\u77e2\u91cf                                              ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;=={ Translate by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Translation Matrix                                        ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: highflybird, Copyright ? 2012                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; v  &#8211; Displacement vector by which to translate            ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Translation ( v )<br \/>\n  (list<br \/>\n    (list 1. 0. 0. (car v))<br \/>\n    (list 0. 1. 0. (cadr v))<br \/>\n    (list 0. 0. 1. (caddr v))<br \/>\n    (list 0. 0. 0. 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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5e73\u79fb\u53d8\u6362\u77e9\u9635\u65b9\u5f0f2                                         ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; p1 &#8211; \u57fa\u70b9                                                 ;;<br \/>\n;;; p2 &#8211; \u76ee\u6807\u70b9                                               ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;=={ Translate by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Translation Matrix                                        ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: highflybird, Copyright ? 2012                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; p1, p2 &#8211; Points representing vector by which to translate ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:TranslateBy2P ( p1 p2 )<br \/>\n  (MAT:Translation (mapcar &#8216;- p2 p1))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u6bd4\u4f8b\u7f29\u653e\u77e9\u9635                                              ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; Cen   &#8211; \u57fa\u70b9                                              ;;<br \/>\n;;; scale &#8211; \u7f29\u653e\u6bd4\u4f8b                                          ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;=={ Scale by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Scaling Matrix                                            ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: highflybird, Copyright ? 2012                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; Cen    &#8211; Base Point for Scaling Transformation            ;;<br \/>\n;;; scale  &#8211; Scale Factor by which to scale object            ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Scaling ( Cen scale \/ s)<br \/>\n  (setq s (- 1 scale))<br \/>\n  (list<br \/>\n    (list scale 0. 0. (* s (car Cen)))<br \/>\n    (list 0. scale 0. (* s (cadr Cen)))<br \/>\n    (list 0. 0. scale (* s (caddr Cen)))<br \/>\n    &#8216;(0. 0. 0. 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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e8c\u7ef4\u65cb\u8f6c\u53d8\u6362\u77e9\u9635                                          ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; Cen &#8211; \u57fa\u70b9                                                ;;<br \/>\n;;; ang &#8211; \u65cb\u8f6c\u89d2\u5ea6                                            ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;=={ Rotate by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Rotation Matrix                                           ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: highflybird, Copyright ? 2012                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; Cen    &#8211; Base Point for Rotation Transformation           ;;<br \/>\n;;; ang    &#8211; Angle through which to rotate object             ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Rotation ( Cen ang \/ c s x y)<br \/>\n  (setq c (cos ang) s (sin ang))<br \/>\n  (setq x (car Cen) y (cadr Cen))<br \/>\n  (list<br \/>\n    (list c (- s) 0. (- x (- (* c x) (* s y))))<br \/>\n    (list s    c  0. (- y (+ (* s x) (* c y))))<br \/>\n    &#8216;(0. 0. 1. 0.)<br \/>\n    &#8216;(0. 0. 0. 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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e09\u7ef4\u65cb\u8f6c\u53d8\u6362\u77e9\u9635                                          ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; Cen  &#8211; \u57fa\u70b9                                               ;;<br \/>\n;;; Axis &#8211; \u65cb\u8f6c\u8f74                                             ;;<br \/>\n;;; ang  &#8211; \u65cb\u8f6c\u89d2                                             ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;=={ 3D Rotate by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: highflybird.                                      ;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; Cen &#8212;Input origin point of rotation                     ;;<br \/>\n;;; Axis&#8212;Input axis vector of rotation                      ;;<br \/>\n;;; Ang &#8212;Input angle of rotation                            ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Rotation3D (Cen Axis Ang \/ A B C D M N P x y z)<br \/>\n  (setq D (distance &#8216;(0 0 0) Axis))<br \/>\n  (if (or (&lt; D 1e-8) (zerop ang))<br \/>\n    &#8216;((1. 0. 0. 0.) (0. 1. 0. 0.) (0. 0. 1. 0.) (0. 0. 0. 1.))<br \/>\n    (setq N (mapcar &#8216;\/ Axis (list D D D))<br \/>\n          x (car N)<br \/>\n          y (cadr N)<br \/>\n          z (caddr N)<br \/>\n          A (cos Ang)<br \/>\n          B (sin Ang)<br \/>\n          C (- 1 A)<br \/>\n          M (list (list (+ A (* x x C))<br \/>\n                        (- (* x y C) (* z B))<br \/>\n                        (+ (* y B) (* x z C))<br \/>\n                  )<br \/>\n                  (list (+ (* z B) (* x y C))<br \/>\n                        (+ A (* y y C))<br \/>\n                        (- (* y z C) (* x B))<br \/>\n                  )<br \/>\n                  (list (- (* x z C) (* y B))<br \/>\n                        (+ (* x B) (* y z C))<br \/>\n                        (+ A (* z z C))<br \/>\n                  )<br \/>\n            )<br \/>\n          p (mapcar &#8216;- Cen (Mat:mxv M Cen))<br \/>\n          M (Mat:DispToMatrix M p)<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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e09\u7ef4\u65cb\u8f6c\u53d8\u6362\u77e9\u9635\uff08\u901a\u8fc7\u4e24\u70b9\u548c\u65cb\u8f6c\u89d2\uff09                      ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; p1,p2  &#8211; \u4e24\u70b9\u5b9a\u4e49\u7684\u65cb\u8f6c\u8f74                                 ;;<br \/>\n;;; ang    &#8211; \u65cb\u8f6c\u89d2\u5ea6                                         ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;=={ 3D Rotate by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Rotation matrix                                           ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: highflybird, Copyright ? 2012                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; p1,p2  &#8211; Two 3D points defining the axis of rotation      ;;<br \/>\n;;; ang    &#8211; Rotation Angle                                   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:RotateBy2P ( p1 p2 ang )<br \/>\n   (MAT:Rotation3D P1 (mapcar &#8216;- p2 p1) ang)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e8c\u7ef4\u955c\u50cf\u53d8\u6362\u77e9\u9635                                          ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; p1     &#8211; \u955c\u50cf\u5411\u91cf\u7b2c\u4e00\u70b9                                   ;;<br \/>\n;;; p2     &#8211; \u955c\u50cf\u5411\u91cf\u7b2c\u4e8c\u70b9                                   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;-=={ Reflect by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Reflects a VLA-Object or Point List using a               ;;<br \/>\n;;; Transformation Matrix                                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: Lee Mac, Copyright ? 2010 &#8211; www.lee-mac.com       ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; target &#8211; VLA-Object or Point List to transform            ;;<br \/>\n;;; p1, p2 &#8211; Points representing vector in which to reflect   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Reflect ( p1 p2 \/ a c s x y)<br \/>\n  (setq a (angle p1 p2) a (+ a a))<br \/>\n  (setq c (cos a) s (sin a))<br \/>\n  (setq x (car p1) y (cadr p1))<br \/>\n  (list<br \/>\n    (list c    s  0. (- x (+ (* c x) (* s y))))<br \/>\n    (list s (- c) 0. (- y (- (* s x) (* c y))))<br \/>\n    &#8216;(0. 0. 1. 0.)<br \/>\n    &#8216;(0. 0. 0. 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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e09\u7ef4\u955c\u50cf\u53d8\u6362\u77e9\u9635                                          ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; p1,p2,p3 &#8211; \u4e09\u70b9\u5b9a\u4e49\u7684\u955c\u50cf\u5e73\u9762                             ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;=={ 3D Reflect by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;-;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Reflection matrix                                         ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: highflybird, Copyright ? 2012-                    ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; p1,p2,p3 &#8211; Three 3D points defining the reflection plane  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Reflect3D (p1 p2 p3 \/ m ux uy uz)<br \/>\n  (mapcar<br \/>\n    &#8216;set<br \/>\n    &#8216;(ux uy uz)<br \/>\n    (MAT:unit (MAT:vxv (mapcar &#8216;- p2 p1) (mapcar &#8216;- p3 p1)))<br \/>\n  )<br \/>\n  (setq m (list (list (- 1. (* 2. ux ux)) (* -2. uy ux) (* -2. ux uz))<br \/>\n                (list (* -2. ux uy) (- 1. (* 2. uy uy)) (* -2. uy uz))<br \/>\n                (list (* -2. ux uz) (* -2. uy uz) (- 1. (* 2. uz uz)))<br \/>\n          )<br \/>\n  )<br \/>\n  (Mat:DispToMatrix m (mapcar &#8216;- p1 (MAT:mxv m p1)))<br \/>\n)<\/p>\n<p>;;;***********************************************************;;<br \/>\n;;; \u4ee5\u4e0b\u90e8\u5206\u6765\u81eaLee-Mac,\u7279\u5730\u81f4\u8c22!                             ;;<br \/>\n;;;***********************************************************;;<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;=={      \u4e8c\u7ef4\u53d8\u6362       }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u6bd4\u4f8b\u7f29\u653e\u77e9\u9635                                              ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; target &#8211; vla-object \u6216\u8005\u70b9                                ;;<br \/>\n;;; p1     &#8211; \u57fa\u70b9                                             ;;<br \/>\n;;; scale  &#8211; \u7f29\u653e\u6bd4\u4f8b                                         ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;=={ Scale by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Scales a VLA-Object or Point List using a                 ;;<br \/>\n;;; Transformation Matrix                                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: Lee Mac, Copyright ? 2010 &#8211; www.lee-mac.com       ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; target &#8211; VLA-Object or Point List to transform            ;;<br \/>\n;;; p1     &#8211; Base Point for Scaling Transformation            ;;<br \/>\n;;; scale  &#8211; Scale Factor by which to scale object            ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun LM:ScaleByMatrix ( target p1 scale \/ m )<br \/>\n  (LM:ApplyMatrixTransformation target<br \/>\n    (setq m<br \/>\n      (list<br \/>\n        (list scale 0. 0.)<br \/>\n        (list 0. scale 0.)<br \/>\n        (list 0. 0. scale)<br \/>\n      )<br \/>\n    )<br \/>\n    (mapcar &#8216;- p1 (MAT:mxv m p1))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5e73\u79fb\u53d8\u6362\u77e9\u9635                                              ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; target &#8211; vla-object \u6216\u8005\u70b9                                ;;<br \/>\n;;; p1     &#8211; \u57fa\u70b9                                             ;;<br \/>\n;;; p2     &#8211; \u76ee\u6807\u70b9                                           ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;=={ Translate by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Translates a VLA-Object or Point List using a             ;;<br \/>\n;;; Transformation Matrix                                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: Lee Mac, Copyright ? 2010 &#8211; www.lee-mac.com       ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; target &#8211; VLA-Object or Point List to transform            ;;<br \/>\n;;; p1, p2 &#8211; Points representing vector by which to translate ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun LM:TranslateByMatrix ( target p1 p2 )<br \/>\n  (LM:ApplyMatrixTransformation target<br \/>\n    (list<br \/>\n      (list 1. 0. 0.)<br \/>\n      (list 0. 1. 0.)<br \/>\n      (list 0. 0. 1.)<br \/>\n    )<br \/>\n    (mapcar &#8216;- p2 p1)<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u65cb\u8f6c\u53d8\u6362\u77e9\u9635                                              ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; target &#8211; vla-object \u6216\u8005\u70b9                                ;;<br \/>\n;;; p1     &#8211; \u57fa\u70b9                                             ;;<br \/>\n;;; ang    &#8211; \u65cb\u8f6c\u89d2\u5ea6                                         ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;=={ Rotate by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Rotates a VLA-Object or Point List using a                ;;<br \/>\n;;; Transformation Matrix                                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: Lee Mac, Copyright ? 2010 &#8211; www.lee-mac.com       ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; target &#8211; VLA-Object or Point List to transform            ;;<br \/>\n;;; p1     &#8211; Base Point for Rotation Transformation           ;;<br \/>\n;;; ang    &#8211; Angle through which to rotate object             ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun LM:RotateByMatrix ( target p1 ang \/ m)<br \/>\n  (LM:ApplyMatrixTransformation target<br \/>\n    (setq m<br \/>\n      (list<br \/>\n        (list (cos ang) (- (sin ang)) 0.)<br \/>\n        (list (sin ang)    (cos ang)  0.)<br \/>\n        (list    0.           0.      1.)<br \/>\n      )<br \/>\n    )<br \/>\n    (mapcar &#8216;- p1 (MAT:mxv m p1))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u955c\u50cf\u53d8\u6362\u77e9\u9635                                              ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; target &#8211; vla-object \u6216\u8005\u70b9                                ;;<br \/>\n;;; p1     &#8211; \u955c\u50cf\u5411\u91cf\u7b2c\u4e00\u70b9                                   ;;<br \/>\n;;; p2     &#8211; \u955c\u50cf\u5411\u91cf\u7b2c\u4e8c\u70b9                                   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;-=={ Reflect by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Reflects a VLA-Object or Point List using a               ;;<br \/>\n;;; Transformation Matrix                                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: Lee Mac, Copyright ? 2010 &#8211; www.lee-mac.com       ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; target &#8211; VLA-Object or Point List to transform            ;;<br \/>\n;;; p1, p2 &#8211; Points representing vector in which to reflect   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun LM:ReflectByMatrix ( target p1 p2 \/ m)<br \/>\n  (<br \/>\n    (lambda ( a \/ m )<br \/>\n      (LM:ApplyMatrixTransformation target<br \/>\n        (setq m<br \/>\n          (list<br \/>\n            (list (cos a)    (sin a)  0.)<br \/>\n            (list (sin a) (- (cos a)) 0.)<br \/>\n            (list    0.         0.    1.)<br \/>\n          )<br \/>\n        )<br \/>\n        (mapcar &#8216;- p1 (MAT:mxv m p1))<br \/>\n      )<br \/>\n    )<br \/>\n    (* 2. (angle p1 p2))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u53d8\u6362\u51fd\u6570                                                  ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; target &#8211; vla-object \u6216\u8005\u70b9                                ;;<br \/>\n;;; matrix &#8211; 3&#215;3 \u77e9\u9635                                         ;;<br \/>\n;;; vector &#8211; \u79fb\u52a8\u5411\u91cf                                         ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;-=={ Apply Matrix Transformation }==&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Transforms a VLA-Object or Point List using a             ;;<br \/>\n;;; Transformation Matrix                                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: Lee Mac, Copyright ? 2010 &#8211; www.lee-mac.com       ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; target &#8211; VLA-Object or Point List to Transform            ;;<br \/>\n;;; matrix &#8211; 3&#215;3 Matrix by which to Transform object          ;;<br \/>\n;;; vector &#8211; 3D translation vector                            ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun LM:ApplyMatrixTransformation ( target matrix vector )<br \/>\n  (cond<br \/>\n    ( (eq &#8216;VLA-OBJECT (type target))<\/p>\n<p>      (vla-TransformBy target<br \/>\n        (vlax-tMatrix<br \/>\n          (append (mapcar (function (lambda ( x v ) (append x (list v)))) matrix vector)<br \/>\n           &#8216;((0. 0. 0. 1.))<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n    ( (listp target)<\/p>\n<p>      (mapcar<br \/>\n        (function<br \/>\n          (lambda ( point ) (mapcar &#8216;+ (MAT:mxv matrix point) vector))<br \/>\n        )<br \/>\n        target<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;=={      \u4e09\u7ef4\u53d8\u6362       }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e09\u7ef4\u65cb\u8f6c\u53d8\u6362\u77e9\u9635                                          ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; target &#8211; vla-object \u6216\u8005\u70b9                                ;;<br \/>\n;;; p1,p2  &#8211; \u4e24\u70b9\u5b9a\u4e49\u7684\u65cb\u8f6c\u8f74                                 ;;<br \/>\n;;; ang    &#8211; \u65cb\u8f6c\u89d2\u5ea6                                         ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;=={ 3D Rotate by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Rotates a VLA-Object or Point List about a 3D axis using  ;;<br \/>\n;;; a Transformation matrix.                                  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: Lee Mac, Copyright ? 2011 &#8211; www.lee-mac.com       ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; target &#8211; VLA-Object or Point List to Rotate               ;;<br \/>\n;;; p1,p2  &#8211; Two 3D points defining the axis of rotation      ;;<br \/>\n;;; ang    &#8211; Rotation Angle                                   ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun LM:Rotate3D ( target p1 p2 ang \/ ux uy uz u m)<br \/>\n  (mapcar &#8216;set &#8216;(ux uy uz) (setq u (MAT:unit (mapcar &#8216;- p2 p1))))<br \/>\n  (LM:ApplyMatrixTransformation target<br \/>\n    (setq m<br \/>\n      (MAT:m+m<br \/>\n        (list<br \/>\n          (list (cos ang) 0. 0.)<br \/>\n          (list 0. (cos ang) 0.)<br \/>\n          (list 0. 0. (cos ang))<br \/>\n        )<br \/>\n        (MAT:m+m<br \/>\n          (MAT:mxs<br \/>\n            (list<br \/>\n              (list 0. (- uz) uy)<br \/>\n              (list uz 0. (- ux))<br \/>\n              (list (- uy) ux 0.)<br \/>\n            )<br \/>\n            (sin ang)<br \/>\n          )<br \/>\n          (MAT:mxs (mapcar (function (lambda ( e ) (MAT:vxs u e))) u) (- 1. (cos ang)))<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n    (mapcar &#8216;- p1 (MAT:mxv m p1))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e09\u7ef4\u955c\u50cf\u53d8\u6362\u77e9\u9635                                          ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; target   &#8211; vla-object \u6216\u8005\u70b9                              ;;<br \/>\n;;; p1,p2,p3 &#8211; \u4e09\u70b9\u5b9a\u4e49\u7684\u955c\u50cf\u5e73\u9762                             ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;=={ 3D Reflect by Matrix }==&#8212;&#8212;&#8212;&#8212;&#8212;-;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Reflects a VLA-Object or Point List in a plane using a    ;;<br \/>\n;;; Transformation matrix.                                    ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: Lee Mac, Copyright ? 2011 &#8211; www.lee-mac.com       ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; target   &#8211; VLA-Object or Point List to Reflect            ;;<br \/>\n;;; p1,p2,p3 &#8211; Three 3D points defining the reflection plane  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun LM:Reflect3D ( target p1 p2 p3 \/ m u ux uy uz )<br \/>\n  (mapcar &#8216;set &#8216;(ux uy uz) (setq u (MAT:unit (MAT:vxv (mapcar &#8216;- p2 p1) (mapcar &#8216;- p3 p1)))))<br \/>\n  (LM:ApplyMatrixTransformation target<br \/>\n    (setq m<br \/>\n      (list<br \/>\n        (list (- 1. (* 2. ux ux)) (* -2. uy ux) (* -2. ux uz))<br \/>\n        (list (* -2. ux uy) (- 1. (* 2. uy uy)) (* -2. uy uz))<br \/>\n        (list (* -2. ux uz) (* -2. uy uz) (- 1. (* 2. uz uz)))<br \/>\n      )<br \/>\n    )<br \/>\n    (mapcar &#8216;- p1 (MAT:mxv m p1))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u53d8\u6362\u51fd\u6570                                                  ;;<br \/>\n;;; \u53c2\u6570:                                                     ;;<br \/>\n;;; target &#8211; vla-object \u6216\u8005\u70b9                                ;;<br \/>\n;;; matrix &#8211; 3&#215;3 \u77e9\u9635                                         ;;<br \/>\n;;; vector &#8211; \u79fb\u52a8\u5411\u91cf                                         ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;&#8212;&#8212;&#8212;-=={ Apply Matrix Transformation }==&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Transforms a VLA-Object or Point List using a             ;;<br \/>\n;;; Transformation Matrix                                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Author: Lee Mac, Copyright ? 2010 &#8211; www.lee-mac.com       ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; Arguments:                                                ;;<br \/>\n;;; target &#8211; VLA-Object or Point List to Transform            ;;<br \/>\n;;; matrix &#8211; 3&#215;3 Matrix by which to Transform object          ;;<br \/>\n;;; vector &#8211; 3D translation vector                            ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun LM:ApplyMatrixTransformation ( target matrix vector )<br \/>\n  (cond<br \/>\n    ( (eq &#8216;VLA-OBJECT (type target))<\/p>\n<p>      (vla-TransformBy target<br \/>\n        (vlax-tMatrix<br \/>\n          (append (mapcar (function (lambda ( x v ) (append x (list v)))) matrix vector)<br \/>\n           &#8216;((0. 0. 0. 1.))<br \/>\n          )<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n    ( (listp target)<\/p>\n<p>      (mapcar<br \/>\n        (function<br \/>\n          (lambda ( point ) (mapcar &#8216;+ (MAT:mxv matrix point) vector))<br \/>\n        )<br \/>\n        target<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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5757\u53c2\u7167\u7684\u53d8\u6362\u77e9\u9635\u548c\u9006\u77e9\u9635                                  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u529f\u80fd\uff1a \u67d0\u70b9\u5728\u5757\u5185\u5750\u6807\u7cfb\u7edf\u548c\u4e16\u754c\u6216\u8005\u7528\u6237\u5750\u6807\u7cfb\u7edf\u7684\u8f6c\u6362     ;;<br \/>\n;;; \u53c2\u6570\uff1a pt \u8981\u53d8\u6362\u7684\u70b9\u3002                                    ;;<br \/>\n;;;        rlst \u7528 nentselp\u6216\u8005nentsel\u5f97\u5230\u7684\u8868\u7684\u6700\u540e\u4e00\u9879      ;;<br \/>\n;;;        from  \u5750\u6807\u7cfb\uff1a0,WCS; 1,\u5f53\u524dUCS; 2,\u5757\u53c2\u7167\u5750\u6807\u7cfbRCS  ;;<br \/>\n;;;        to    \u5750\u6807\u7cfb\uff1a0,WCS; 1,\u5f53\u524dUCS; 2,\u5757\u53c2\u7167\u5750\u6807\u7cfbRCS  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; MAT:TransNested (gile)                                    ;;<br \/>\n;;; Translates a point coordinates from WCS or UCS to RCS     ;;<br \/>\n;;; -coordinates system of a                                  ;;<br \/>\n;;; reference (xref or block) whatever its nested level-      ;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Arguments                                                 ;;<br \/>\n;;; pt : the point to translate                               ;;<br \/>\n;;; rlst : the parents entities list from the deepest nested  ;;<br \/>\n;;;        to the one inserted in current space -same as      ;;<br \/>\n;;;        (last (nentsel)) or (last (nentselp))              ;;<br \/>\n;;; from to : as with trans function: 0.WCS, 1.UCS, 2.RCS     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<\/p>\n<p>(defun MAT:TransNested (pt rlst from to \/ GEOM)<br \/>\n  (and (= 1 from) (setq pt (trans pt 1 0)))<br \/>\n  (and (= 2 to) (setq rlst (reverse rlst)))<br \/>\n  (and (or (= 2 from) (= 2 to))<br \/>\n       (while rlst<br \/>\n        (setq geom (if  (= 2 to)<br \/>\n                      (MAT:RevRefGeom (car rlst))<br \/>\n                      (MAT:RefGeom (car rlst))<br \/>\n                    )<br \/>\n               rlst (cdr rlst)<br \/>\n               pt   (mapcar &#8216;+ (MAT:mxv (car geom) pt) (cadr geom))<br \/>\n        )<br \/>\n       )<br \/>\n  )<br \/>\n  (if (= 1 to)<br \/>\n    (trans pt 0 1)<br \/>\n    pt<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u529f\u80fd\uff1a\u56fe\u5757\u7684\u53d8\u6362\u77e9\u9635                                      ;;<br \/>\n;;; \u8f93\u5165\uff1a\u5757\u53c2\u7167\u7684\u56fe\u5143\u540d                                      ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u5757\u53c2\u7167\u7684\u53d8\u6362\u77e9\u9635                                    ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; MAT:RefGeom (gile)                                        ;;<br \/>\n;;; Returns a list which first item is a 3&#215;3 transformation   ;;<br \/>\n;;; matrix(rotation,scales normal) and second item the object ;;<br \/>\n;;; insertion point in its parent(xref, bloc or space)        ;;<br \/>\n;;;                                                           ;;<br \/>\n;;; Argument : an ename                                       ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<\/p>\n<p>(defun MAT:RefGeom (ename \/ elst ang norm mat)<br \/>\n  (setq elst (entget ename)<br \/>\n        ang  (cdr (assoc 50 elst))<br \/>\n        norm (cdr (assoc 210 elst))<br \/>\n  )<br \/>\n  (list<br \/>\n    (setq mat<br \/>\n           (MAT:mxm<br \/>\n             (mapcar (function (lambda (v) (trans v 0 norm T)))<br \/>\n                     &#8216;((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))<br \/>\n             )<br \/>\n             (MAT:mxm<br \/>\n               (list (list (cos ang) (- (sin ang)) 0.0)<br \/>\n                     (list (sin ang) (cos ang) 0.0)<br \/>\n                     &#8216;(0.0 0.0 1.0)<br \/>\n               )<br \/>\n               (list (list (cdr (assoc 41 elst)) 0.0 0.0)<br \/>\n                     (list 0.0 (cdr (assoc 42 elst)) 0.0)<br \/>\n                     (list 0.0 0.0 (cdr (assoc 43 elst)))<br \/>\n               )<br \/>\n             )<br \/>\n           )<br \/>\n    )<br \/>\n    (mapcar<br \/>\n      &#8216;-<br \/>\n      (trans (cdr (assoc 10 elst)) norm 0)<br \/>\n      (MAT:mxv mat<br \/>\n           (cdr (assoc 10 (tblsearch &#8220;BLOCK&#8221; (cdr (assoc 2 elst)))))<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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u529f\u80fd\uff1a\u56fe\u5757\u7684\u53d8\u6362\u77e9\u9635\u7684\u9006\u77e9\u9635                              ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; MAT:RevRefGeom (gile)                                     ;;<br \/>\n;;; MAT:RefGeom inverse function                              ;;<br \/>\n;;; \u8f93\u5165\uff1a\u5757\u53c2\u7167\u7684\u56fe\u5143\u540d                                      ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u5757\u53c2\u7167\u7684\u53d8\u6362\u77e9\u9635\u7684\u9006\u77e9\u9635                            ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:RevRefGeom (ename \/ entData ang norm mat)<br \/>\n  (setq entData (entget ename)<br \/>\n        ang     (- (cdr (assoc 50 entData)))<br \/>\n        norm    (cdr (assoc 210 entData))<br \/>\n  )<br \/>\n  (list<br \/>\n    (setq mat<br \/>\n           (MAT:mxm<br \/>\n             (list (list (\/ 1 (cdr (assoc 41 entData))) 0.0 0.0)<br \/>\n                   (list 0.0 (\/ 1 (cdr (assoc 42 entData))) 0.0)<br \/>\n                   (list 0.0 0.0 (\/ 1 (cdr (assoc 43 entData))))<br \/>\n             )<br \/>\n             (MAT:mxm<br \/>\n               (list (list (cos ang) (- (sin ang)) 0.0)<br \/>\n                     (list (sin ang) (cos ang) 0.0)<br \/>\n                     &#8216;(0.0 0.0 1.0)<br \/>\n               )<br \/>\n               (mapcar (function (lambda (v) (trans v norm 0 T)))<br \/>\n                       &#8216;((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))<br \/>\n               )<br \/>\n             )<br \/>\n           )<br \/>\n    )<br \/>\n    (mapcar &#8216;-<br \/>\n            (cdr (assoc 10 (tblsearch &#8220;BLOCK&#8221; (cdr (assoc 2 entData)))))<br \/>\n            (MAT:mxv mat (trans (cdr (assoc 10 entData)) norm 0))<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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5c5e\u6027\u7684\u53d8\u6362\u77e9\u9635Attrib Transformation Matrix. -highflybird  ;;<br \/>\n;;; \u8f93\u5165\uff1aEname \u5c5e\u6027\u7684\u56fe\u5143\u540d                                  ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u5c5e\u6027\u7684\u53d8\u6362\u77e9\u9635                                      ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:AttGeom (ename \/ ang norm mat elst)<br \/>\n  (setq elst (entget ename)<br \/>\n        ang  (cdr (assoc 50 elst))<br \/>\n        norm (cdr (assoc 210 elst))<br \/>\n  )<br \/>\n  (list<br \/>\n    (setq mat<br \/>\n           (mxm<br \/>\n             (mapcar (function (lambda (v) (trans v 0 norm T)))<br \/>\n                     &#8216;((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))<br \/>\n             )<br \/>\n             (list (list (cos ang) (- (sin ang)) 0.0)<br \/>\n                   (list (sin ang) (cos ang) 0.0)<br \/>\n                   &#8216;(0.0 0.0 1.0)<br \/>\n             )<br \/>\n           )<br \/>\n    )<br \/>\n    (trans (cdr (assoc 10 elst)) norm 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;&#8212;&#8212;&#8211;;;<br \/>\n;;; Append displacement vector to a matrix      -Highflybird- ;;<br \/>\n;;; \u628a\u4f4d\u79fb\u77e2\u91cf\u6dfb\u52a0\u5230\u77e9\u9635\u4e2d                                    ;;<br \/>\n;;; \u8f93\u5165\uff1amat &#8212; \u77e9\u9635(3&#215;3)\uff0cdisp &#8212; \u4f4d\u79fb\u77e2\u91cf                  ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u4e00\u4e2a4X4\u7684\u53d8\u6362CAD\u7684\u6807\u51c6\u53d8\u6362\u77e9\u9635                      ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Mat:DispToMatrix (mat disp)<br \/>\n  (append<br \/>\n    (mapcar &#8216;append mat (mapcar &#8216;list disp))<br \/>\n    &#8216;((0. 0. 0. 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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4ece\u4e00\u4e2a\u5750\u6807\u7cfb\u7edf\u5230\u53e6\u4e00\u4e2a\u5750\u6807\u7cfb\u7edf\u7684\u53d8\u6362\u77e9\u9635                  ;;<br \/>\n;;; \u8f93\u5165\uff1afrom &#8211; \u6e90\u5750\u6807\u7cfb\uff1bto &#8211; \u76ee\u7684\u5750\u6807\u7cfb                    ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u4e00\u4e2a4X4\u7684CAD\u53d8\u6362\u77e9\u9635                                ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Trans (from to)<br \/>\n  (append<br \/>\n    (MAT:trp<br \/>\n      (list<br \/>\n        (trans &#8216;(1 0 0) from to t)<br \/>\n        (trans &#8216;(0 1 0) from to t)<br \/>\n        (trans &#8216;(0 0 1) from to t)<br \/>\n        (trans &#8216;(0 0 0) from to nil)<br \/>\n      )<br \/>\n    )<br \/>\n    &#8216;((0. 0. 0. 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;&#8212;&#8212;&#8211;;;<br \/>\n;;; ucs\u5230wcs\u77e9\u9635\uff0c\u4e5f\u53ef\u79f0UCS\u7684\u53d8\u6362\u77e9\u9635                         ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:u2w () (MAT:Trans 1 0))<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; wcs\u5230ucs\u77e9\u9635\uff0c\u4e5f\u53ef\u79f0UCS\u7684\u9006\u53d8\u6362\u77e9\u9635                       ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:w2u () (MAT:Trans 0 1))<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;OCS\u7684\u53d8\u6362\u77e9\u9635\uff0c\u6216\u53eb\u6cd5\u7ebf\u77e2\u91cf\u7684\u53d8\u6362\u77e9\u9635                       ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Mat:OcsMatrix (zdir \/ xdir)<br \/>\n  (or (equal 1.0 (distance &#8216;(0 0 0) zdir) 1e-8)<br \/>\n    (setq zdir (Mat:Unit zdir))                                 ; \u5148\u628a\u77e2\u91cf\u5355\u4f4d\u5316\u3002<br \/>\n  )<br \/>\n  (if (and (&lt; (abs (car zdir)) 0.015625)                        ; \u5982\u679c(abs (Nx) &lt; 1\/64)<br \/>\n           (&lt; (abs (cadr zdir)) 0.015625)                       ; \u4e14 (abs (Ny) &lt; 1\/64)<br \/>\n      )<br \/>\n    (setq xdir (Mat:Unit (Mat:vxv &#8216;(0 1 0) zdir)))              ; Ax = Wy X N   \uff08\u53c9\u79ef\uff09<br \/>\n    (setq xdir (Mat:Unit (Mat:vxv &#8216;(0 0 1) zdir)))              ;\u5426\u5219 Ax = Wz X N\u3002<br \/>\n  )<br \/>\n  (list xdir (Mat:Unit (Mat:vxv zdir xdir)) zdir)               ;Y\u65b9\u5411\u6ee1\u8db3\u53f3\u624b\u578b\u5750\u6807\u7cfb\u7edf<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u901a\u7528\u53d8\u6362\u77e9\u9635 by highflybird                               ;;<br \/>\n;;; \u8f93\u5165\uff1afrom &#8211; \u539f\u5750\u6807\u7cfb\uff0c                                   ;;<br \/>\n;;;       to   &#8211; \u76ee\u7684\u5750\u6807\u7cfb\uff0c                                 ;;<br \/>\n;;;       Org  &#8211; \u76ee\u7684\u5750\u6807\u7cfb\u7684\u539f\u70b9\u76f8\u5bf9\u539f\u5750\u6807\u7cfb\u7684\u4f4d\u7f6e           ;;<br \/>\n;;;       Ang  &#8211; \u76f8\u5bf9\u4e8e\u539f\u5750\u6807\u7cfb\u7684\u65cb\u8f6c\u89d2\u5ea6                     ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u4e24\u4e2a\u77e9\u9635\uff0c\u4e00\u4e2a\u662f\u4ece\u539f\u5750\u6807\u7cfb\u53d8\u6362\u5230\u76ee\u7684\u5750\u6807\u7cfb\u7684\u53d8\u6362\u77e9\u9635;;<br \/>\n;;;       \u4e00\u4e2a\u662f\u4ece\u76ee\u7684\u5750\u6807\u7cfb\u53d8\u6362\u5230\u539f\u5750\u6807\u7cfb\u7684\u53d8\u6362\u77e9\u9635          ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:Align (from to Org Ang \/ Mat Rot Inv Cen)<br \/>\n  (setq Mat (mapcar (function (lambda (v) (trans v from to T)))<br \/>\n                    &#8216;((1. 0. 0.) (0. 1. 0.) (0. 0. 1.))<br \/>\n            )<br \/>\n  )<br \/>\n  (if (not (equal ang 0 1e-14))<br \/>\n    (setq Rot (list (list (cos ang) (- (sin ang)) 0.)<br \/>\n                    (list (sin ang) (cos ang) 0.)<br \/>\n                    (list 0. 0. 1.)<br \/>\n              )<br \/>\n          mat (MAT:mxm mat Rot)<br \/>\n    )<br \/>\n  )<br \/>\n  (setq Cen (trans Org to from))<br \/>\n  (setq Inv (mat:trp mat))<br \/>\n  (list<br \/>\n    (Mat:DispToMatrix mat Cen)                                  ;from-&gt;to<br \/>\n    (Mat:DispToMatrix Inv (mat:mxv mat (mapcar &#8216;- Cen)))        ;to-&gt;from<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u901a\u8fc7\u4e24\u4e2a\u5750\u6807\u8f74\u548c\u5750\u6807\u539f\u70b9\u5b9a\u4e49\u7684\u53d8\u6362\u77e9\u9635  -by highflybird   ;;<br \/>\n;;; \u8f93\u5165\uff1aOrg  &#8211; \u5750\u6807\u7cfb\u539f\u70b9\uff0c                                 ;;<br \/>\n;;;       Vx   &#8211; \u5750\u6807\u7cfbX \u65b9\u5411\uff0c                               ;;<br \/>\n;;;       Vy   &#8211; \u5750\u6807\u7cfby \u65b9\u5411                                 ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u4e24\u4e2a\u77e9\u9635\uff0c\u4e00\u4e2a\u662f\u8be5\u5750\u6807\u7cfb\u7684\u53d8\u6362\u77e9\u9635\uff0c\u4e00\u4e2a\u662f\u5176\u9006\u77e9\u9635  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:2VMatrix (Org Vx Vy \/ Vz Rot)<br \/>\n  (if (or (equal Vx &#8216;(0 0 0) 1e-14) (equal Vy &#8216;(0 0 0) 1e-14))<br \/>\n    &#8216;((1. 0. 0. 0.) (0. 1. 0. 0.) (0. 0. 1. 0.) (0. 0. 0. 1.))<br \/>\n    (progn<br \/>\n      (setq Vx  (Mat:Unit Vx))                                  ;X Axis<br \/>\n      (setq Vy  (Mat:Unit Vy))                                  ;Y Axis<br \/>\n      (setq Vz  (Mat:unit (MAT:vxv Vx Vy)))                     ;Z Axis<br \/>\n      (setq Vy  (Mat:unit (MAT:vxv Vz Vx)))                     ;Y Axis<br \/>\n      (setq Rot (list Vx Vy Vz))                                ;Rotation matrix<br \/>\n      (list                                                     ;Inverse Rotation matrix<br \/>\n        (Mat:DispToMatrix (MAT:trp Rot) Org)                    ;The transformation matrix<br \/>\n        (Mat:DispToMatrix Rot (MAT:mxv Rot (mapcar &#8216;- Org)))    ;The Inverse matrix<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;&#8212;&#8212;&#8211;;;<br \/>\n;;; Mat:3PMatrix  -Highflybird-                               ;;<br \/>\n;;; \u901a\u8fc7\u4e24\u4e2a\u5750\u6807\u8f74\u548c\u5750\u6807\u539f\u70b9\u5b9a\u4e49\u7684\u53d8\u6362\u77e9\u9635  -by highflybird   ;;<br \/>\n;;; \u8f93\u5165\uff1aP1 &#8211; \u5750\u6807\u7cfb\u539f\u70b9\uff0c                                   ;;<br \/>\n;;;       P2 &#8211; \u5750\u6807\u7cfb\u7684\u7b2c2\u70b9                                  ;;<br \/>\n;;;       P3 &#8211; \u5750\u6807\u7cfb\u7684\u7b2c3\u70b9                                  ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u4e24\u4e2a\u77e9\u9635\uff0c\u4e00\u4e2a\u662f\u8be5\u5750\u6807\u7cfb\u7684\u53d8\u6362\u77e9\u9635\uff0c\u4e00\u4e2a\u662f\u5176\u9006\u77e9\u9635  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Mat:3PMatrix (p1 p2 p3 \/ v1 v2 v3)<br \/>\n  (MAT:2VMatrix P1 (mapcar &#8216;- p2 p1) (mapcar &#8216;- p3 p1))<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5e73\u9f50\u5b9e\u4f53\u7684\u53d8\u6362\u77e9\u9635  -by highflybird                       ;;<br \/>\n;;; \u8f93\u5165\uff1aEnt &#8211; \u5b9e\u4f53\u540d                                        ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u5e73\u9f50\u8fd9\u4e2a\u5b9e\u4f53\u7684\u53d8\u6362\u77e9\u9635\u548c\u5b83\u7684\u9006\u77e9\u9635                  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Mat:EntityMatrix (Ent \/ z dxf Cen obj an m1 mat Inv org)<br \/>\n  (setq dxf (entget ent))<br \/>\n  (if (setq Cen (cdr (assoc 10 dxf)))                           ;Insertpoint,center or startpoint,etc.<br \/>\n    (if (null (caddr Cen))<br \/>\n      (setq Cen (append Cen &#8216;(0.0)))<br \/>\n    )<br \/>\n    (setq Cen &#8216;(0 0 0))<br \/>\n  )<br \/>\n  (setq obj (vlax-ename-&gt;vla-object Ent))<br \/>\n  (if (and (vlax-property-available-p obj &#8216;elevation)           ;If it has elevation value.<br \/>\n           (wcmatch (vla-get-objectname obj) &#8220;*Polyline&#8221;)       ;It&#8217;s a &#8220;AcDb2dPolyline&#8221; or &#8220;AcDbPolyline&#8221; object<br \/>\n      )<br \/>\n    (setq z   (vla-get-elevation obj)<br \/>\n          Cen (list (car Cen) (cadr Cen) (+ (caddr Cen) z))     ;add elevation value<br \/>\n    )<br \/>\n  )<br \/>\n  (if (vlax-property-available-p obj &#8216;rotation)                 ;if it has a rotaion angle<br \/>\n    (setq an (vla-get-rotation obj))<br \/>\n    (setq an 0)<br \/>\n  )<br \/>\n  (MAT:Align 0 Ent Cen an)                                      ;return two matrices, the first is WCS-&gt;OCS,the second is OCS-&gt;WCS<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;\u901a\u7528\u7684\u8f74\u6d4b\u53d8\u6362\u77e9\u9635     highflybird  2012.12                ;;<br \/>\n;;;Axonometric projections Rotation matrices                  ;;<br \/>\n;;;Isometric projection: a = (\/ pi 4),b = (atan (- (sqrt 2))) ;;<br \/>\n;;;Input: a &#8211; Rotation angle about the vertical axis          ;;<br \/>\n;;;       b &#8211; Rotation angle about the horizontal axis        ;;<br \/>\n;;;Output: transforamtion matrix of this projection           ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:ISO (a b \/ ca sa cb sb)<br \/>\n  (setq ca (cos a))<br \/>\n  (setq sa (sin a))<br \/>\n  (setq cb (cos b))<br \/>\n  (setq sb (sin b))<br \/>\n  (list (list ca        (- sa)    0      0)<br \/>\n        (list (* sa cb) (* ca cb) (- sb) 0)<br \/>\n        (list (* sa sb) (* ca sb) cb     0)<br \/>\n        (list 0 0 0 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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u70b9\u96c6\u53d8\u6362                                                  ;;<br \/>\n;;; \u8f93\u5165: \u8981\u53d8\u6362\u7684\u70b9\u96c6                                        ;;<br \/>\n;;; \u8f93\u51fa: \u53d8\u6362\u540e\u7684\u70b9\u96c6                                        ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:TransList (points from to Disp)<br \/>\n  (mapcar (function (lambda (p) (trans p from to Disp))) points)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u70b9\u53d8\u63621                                                   ;;<br \/>\n;;; \u8f93\u5165: \u8981\u53d8\u6362\u7684\u70b9\u548c\u539f\u70b9\u53ca\u53d8\u6362\u5411\u91cf                          ;;<br \/>\n;;; \u8f93\u51fa: \u70b9\u53d8\u6362\u540e\u7684\u4f4d\u7f6e                                      ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:TransU2W (p p0 v \/ d x0 y0 x1 y1 dv rt)<br \/>\n  (setq d (distance &#8216;(0 0) v))<br \/>\n  (if (equal d 1e-14)<br \/>\n    P0<br \/>\n    (setq x1 (car  p)<br \/>\n          y1 (cadr p)<br \/>\n          x0 (car  v)<br \/>\n          y0 (cadr v)<br \/>\n          dv (list (\/ (- (* x1 x0) (* y1 y0)) d)<br \/>\n                   (\/ (+ (* y1 x0) (* x1 y0)) d)<br \/>\n             )<br \/>\n          rt (mapcar &#8216;+ P0 dv)<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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u70b9\u53d8\u63622                                                   ;;<br \/>\n;;; \u8f93\u5165: \u8981\u53d8\u6362\u7684\u70b9\u548c\u539f\u70b9\u53ca\u53d8\u6362\u5411\u91cf                          ;;<br \/>\n;;; \u8f93\u51fa: \u70b9\u53d8\u6362\u540e\u7684\u4f4d\u79fb\u5411\u91cf                                  ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun MAT:TransW2U (p p0 v \/ d x0 y0 x1 y1 dv)<br \/>\n  (setq d (distance &#8216;(0 0) v))<br \/>\n  (if (equal d 1e-14)<br \/>\n    (list 0 0)<br \/>\n    (setq x1 (- (car p) (car p0))<br \/>\n          y1 (- (cadr p) (cadr p0))<br \/>\n          x0 (car v)<br \/>\n          y0 (cadr v)<br \/>\n          dv (list (\/ (+ (* x1 x0) (* y1 y0)) d)<br \/>\n                   (\/ (- (* y1 x0) (* x1 y0)) d)<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;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u4e09\u7ef4\u73af\u5f62\u9635\u5217                                              ;;<br \/>\n;;; \u8f93\u5165\uff1aObjlst    &#8212; \u7269\u4f53\u96c6                                 ;;<br \/>\n;;;       Number    &#8212; \u8981\u9635\u5217\u7684\u4e2a\u6570\uff08\u5305\u542b\u81ea\u8eab\u5728\u5185\uff09           ;;<br \/>\n;;;       FillAngle &#8212; \u65cb\u8f6c\u89d2\u5ea6                               ;;<br \/>\n;;;       IsCCW     &#8212; \u662f\u5426\u9006\u65f6\u9488                             ;;<br \/>\n;;;       P1        &#8212; \u9635\u5217\u4e2d\u5fc3\u70b9                             ;;<br \/>\n;;;       P2        &#8212; \u9635\u5217\u8f74\u7ebf\u7684\u53e6\u4e00\u70b9                       ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u9635\u5217\u7684\u7269\u4f53\u5217\u8868                                      ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Mat:3dPolarArray (Objlst Number FillAngle IsCCW P1 P2 \/ lst1 lst2 ANG MAT NEW)<br \/>\n  (if (and (= (type number) &#8216;INT) (&gt; number 1))<br \/>\n    (progn<br \/>\n      (if IsCCW<br \/>\n        (setq FillAngle (float FillAngle))<br \/>\n        (setq FillAngle (- FillAngle pi pi))<br \/>\n      )<br \/>\n      (setq ang (\/ FillAngle (1- Number)))<br \/>\n      (setq mat (vlax-tmatrix (MAT:RotateBy2P P1 P2 ang)))<br \/>\n      (repeat (1- Number)<br \/>\n        (setq lst1 nil)<br \/>\n        (foreach obj ObjLst<br \/>\n          (setq new (vla-copy obj))<br \/>\n          (vla-transformby new mat)<br \/>\n          (setq lst1 (cons new lst1))<br \/>\n        )<br \/>\n        (setq objLst (reverse lst1))<br \/>\n        (setq lst2 (cons objLst lst2))<br \/>\n      )<br \/>\n      (reverse lst2)<br \/>\n    )<br \/>\n    (list ObjLst)<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u5df2\u77e5\u6cd5\u7ebf\u548c\u539f\u70b9\u7684\u5e73\u9762\u53d8\u6362\u77e9\u9635                              ;;<br \/>\n;;; \u8f93\u5165\uff1aNormal    &#8212; \u6cd5\u7ebf                                   ;;<br \/>\n;;;       Origin    &#8212; \u539f\u70b9                                   ;;<br \/>\n;;; \u8f93\u51fa\uff1a\u9635\u5217\u7684\u7269\u4f53\u5217\u8868                                      ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Mat:Normal_Origin_1 (Normal Origin \/ mat)<br \/>\n  (setq mat (MAT:OCSMATRIX Normal))<br \/>\n  (list<br \/>\n    (Mat:DispToMatrix (mat:trp mat) origin)<br \/>\n    (mat:DispToMatrix mat (mat:mxv mat (mapcar &#8216;- Origin)))<br \/>\n  )<br \/>\n)<\/p>\n<p>(defun Mat:Normal_Origin (Normal Origin \/ mat rev xdir ydir zdir)<br \/>\n  (setq xdir (trans &#8216;(1 0 0) 0 Normal T))<br \/>\n  (setq ydir (trans &#8216;(0 1 0) 0 Normal T))<br \/>\n  (setq zdir (trans &#8216;(0 0 1) 0 Normal T))<br \/>\n  (setq mat  (list xdir ydir zdir))<br \/>\n  (setq rev  (Mat:trp mat))<br \/>\n  (list<br \/>\n    (MAT:DISPTOMATRIX mat Origin)<br \/>\n    (MAT:DISPTOMATRIX rev (mat:mxv rev (mapcar &#8216;- Origin)))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;; \u9009\u62e9\u96c6\u7684\u5305\u56f4\u76d2                                            ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun ENT:SelBox (sel \/ i ent obj MinPt MaxPt MinPts MaxPts objs)<br \/>\n  (setq i 0)<br \/>\n  (repeat (sslength sel)<br \/>\n    (setq ent (ssname sel i))<br \/>\n    (setq obj (vlax-ename-&gt;vla-object ent))<br \/>\n    (setq objs (cons obj objs))<br \/>\n    (vla-getboundingbox obj &#8216;MinPt &#8216;MaxPt)<br \/>\n    (setq MinPts (cons (vlax-safearray-&gt;list minPt) MinPts))<br \/>\n    (setq MaxPts (cons (vlax-safearray-&gt;list maxPt) MaxPts))<br \/>\n    (setq i (1+ i))<br \/>\n  )<br \/>\n  (list (reverse objs)<br \/>\n        (list (apply &#8216;mapcar (cons &#8216;min MinPts))<br \/>\n              (apply &#8216;mapcar (cons &#8216;max MaxPts))<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;&#8212;&#8212;&#8211;;;<br \/>\n;;;\u83b7\u53d6\u7269\u4f53Objects                                            ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun Ent:Ents-&gt;Objs (sel \/ i e o l)<br \/>\n  (setq i (sslength sel))<br \/>\n  (repeat i<br \/>\n    (setq e (ssname sel (setq i (1- i))))<br \/>\n    (setq o (vlax-ename-&gt;vla-object e))<br \/>\n    (setq l (cons o l))<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;***********************************************************;;<br \/>\n;;; \u77e9\u9635\u6d4b\u8bd5\u90e8\u5206                                              ;;<br \/>\n;;;***********************************************************;;<\/p>\n<p>;|<\/p>\n<p>Test for Mat:Normal_Origin<br \/>\n;;;\u6cd5\u7ebf\u539f\u70b9\u77e9\u9635\u6d4b\u8bd5<br \/>\n(defun c:tt ()<br \/>\n  (setq e (car (entsel)))<br \/>\n  (setq o (vlax-ename-&gt;vla-object e))<br \/>\n  (setq Normal (trans &#8216;(0 0 1) 1 0 T))<br \/>\n  (setq origin (getvar &#8216;ucsorg))<br \/>\n  (command &#8220;undo&#8221; &#8220;be&#8221;)<br \/>\n  (setq mat (mat:normal_origin Normal origin))<br \/>\n  (vla-transformby o (vlax-tmatrix (cadr mat)))<br \/>\n  (command &#8220;undo&#8221; &#8220;e&#8221;)<br \/>\n  (Princ)<br \/>\n)<\/p>\n<p>;;;3d\u73af\u5f62\u9635\u5217\u6d4b\u8bd5<br \/>\n(defun C:PolarArrayTest (\/ ss N P1 P2 ActDoc ObjLst)<br \/>\n  (setq ss (ssget))<br \/>\n  (initget 7)<br \/>\n  (setq N (getInt &#8220;n\u6570\u91cf:&#8221;))<br \/>\n  (initget 9)<br \/>\n  (setq P1 (getpoint &#8220;n\u4e2d\u5fc3\u70b9:&#8221;))<br \/>\n  (initget 9)<br \/>\n  (setq p2 (getpoint P1 &#8220;n\u53e6\u4e00\u70b9:&#8221;))<br \/>\n  (if ss<br \/>\n    (progn<br \/>\n      (setq ActDoc (vla-get-ActiveDocument (vlax-get-acad-object)))<br \/>\n      (vla-StartUndoMark ActDoc)<br \/>\n      (setq Ojblst (Ent:Ents-&gt;Objs ss))<br \/>\n      (Mat:3dPolarArray ojblst N (\/ pi 2) nil (trans p1 1 0) (trans p2 1 0))<br \/>\n      (vla-EndUndoMark ActDoc)<br \/>\n      (vlax-release-object ActDoc)<br \/>\n      (princ)<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;Align a 3dSolid to the WCS view<br \/>\n;;;\u8f74\u6d4b\u77e9\u9635\u7684\u6d4b\u8bd5<br \/>\n(defun C:Test (\/ sel ent obj i an new MAT)<br \/>\n  (setq sel (ssget &#8220;_+.:E:S:L&#8221; &#8216;((0 . &#8220;3DSOLID&#8221;))))<br \/>\n  (if sel<br \/>\n    (progn<br \/>\n      (setq ent (ssname sel 0))<br \/>\n      (setq obj (vlax-ename-&gt;vla-object ent))<br \/>\n      (setq i 0)<br \/>\n      (setq an (atan (- (sqrt 2))))<br \/>\n      (foreach f &#8216;(0.25 0.75 1.25 1.75)                         ;Southwest,Northwest,Northeast,Southeast Isometric projection<br \/>\n        (setq mat (MAT:ISO (* f pi) an))<br \/>\n        (setq new (vla-copy obj))<br \/>\n        (vla-put-color new (setq i (1+ i)))<br \/>\n        (vla-transformby new (vlax-tmatrix mat))                ;transformate the object by matrix<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n  (princ)<br \/>\n)<\/p>\n<p>;;;\u4e00\u4e9b\u77e9\u9635\u51fd\u6570\u7684\u6d4b\u8bd5<br \/>\n(defun c:ccc (\/ DXF E ENT I INS MAT0 MAT1 MAT2 MAT3 MAT4 MAT5 MAT6 MAT7 MAT8 MAT9 O ORG SEL VX VY)<br \/>\n  (if (setq ent (car (entsel &#8220;n\u8981\u5e73\u9f50\u7684\u5bf9\u8c61:&#8221;)))               ;(setq sel (ssget &#8220;:S&#8221; &#8216;((0 . &#8220;CIRCLE&#8221;))))<br \/>\n    (progn<br \/>\n      (setq dxf  (entget ent))<br \/>\n      (setq ins  (cdr (assoc 10 dxf)))<br \/>\n      (setq vx   (getvar &#8216;ucsxdir))<br \/>\n      (setq vy   (getvar &#8216;ucsydir))<br \/>\n      (setq org  (getvar &#8216;ucsorg))<br \/>\n      (setq Mat0 (Mat:EntityMatrix ent))<br \/>\n      (setq mat1 (cadr mat0))                                   ;OCS-&gt;WCS<br \/>\n      (setq mat0 (car mat0))                                    ;WCS-&gt;OCS(trans Pt WCS OCS)<\/p>\n<p>      (setq mat2 (Mat:u2w))                                     ;UCS\u7684\u53d8\u6362\u77e9\u9635<br \/>\n      (setq mat3 (Mat:w2u))                                     ;UCS\u7684\u53d8\u6362\u77e9\u9635\u7684\u9006\u77e9\u9635<\/p>\n<p>      (setq Mat4 (MAT:2VMatrix org vx vy))                      ;UCS\u7684\u53d8\u6362\u77e9\u9635<br \/>\n      (setq mat5 (cadr mat4))                                   ;WCS-&gt;UCS<br \/>\n      (setq mat4 (car mat4))                                    ;UCS-&gt;WCS(trans Pt UCS WCS)<\/p>\n<p>      (setq mat6 (Mat:trans 1 0))                               ;UCS\u7684\u53d8\u6362\u77e9\u9635<br \/>\n      (setq mat7 (mat:trans 0 1))                               ;UCS\u7684\u53d8\u6362\u77e9\u9635\u7684\u9006\u77e9\u9635<\/p>\n<p>      (setq i -1)<br \/>\n      (if (setq sel (ssget))<br \/>\n        (progn<br \/>\n          (command &#8220;undo&#8221; &#8220;be&#8221;)<br \/>\n          (repeat (sslength sel)<br \/>\n            (setq e (ssname sel (setq i (1+ i))))<br \/>\n            (setq o (vlax-ename-&gt;vla-object e))<br \/>\n            (vla-transformby o (vlax-tmatrix mat0))<br \/>\n          )<br \/>\n          (command &#8220;undo&#8221; &#8220;e&#8221;)<br \/>\n        )<br \/>\n      )<br \/>\n    )<br \/>\n  )<br \/>\n  (princ)<br \/>\n)<\/p>\n<p>;;;\u6bd4\u4f8b\u7f29\u653e\u77e9\u9635\u7684\u6d4b\u8bd5<br \/>\n(defun c:test1 (\/ ENT I MAT OBJ PT SC SS)<br \/>\n  (initget 1)<br \/>\n  (setq Pt (getpoint &#8220;n\u6bd4\u4f8b\u7f29\u653e\u57fa\u70b9:&#8221;))<br \/>\n  (initget 7)<br \/>\n  (setq sc (getreal &#8220;n\u7f29\u653e\u500d\u6570:&#8221;))<br \/>\n  (setq mat (MAT:Trans 0 (list 0 0 sc)))<br \/>\n  (setq mat (vlax-tmatrix mat))<br \/>\n  (setq i -1)<br \/>\n  (if (setq ss (ssget))<br \/>\n    (repeat (sslength ss)<br \/>\n      (setq ent (ssname ss (setq i (1+ i))))<br \/>\n      (setq obj (vlax-ename-&gt;vla-object ent))<br \/>\n      (MAT:ScaleByMatrix obj mat)<br \/>\n    )<br \/>\n  )<br \/>\n)<\/p>\n<p>;;;\u955c\u50cf\uff0c\u65cb\u8f6c\u548c3\u70b9\u77e9\u9635\u7684\u6d4b\u8bd5<br \/>\n(defun c:test2 (\/ AN ENT I MAT OBJ P0 P1 P2 SS)<br \/>\n  (initget 1)<br \/>\n  (setq P1 (getpoint &#8220;n \u70b91:&#8221;))<br \/>\n  (initget 1)<br \/>\n  (setq P2 (getpoint p1 &#8220;n \u70b92:&#8221;))<br \/>\n  ;(initget 1)<br \/>\n  ;(setq P3 (getpoint p1 &#8220;n \u70b92:&#8221;))<\/p>\n<p>  (grdraw p1 p2 1)<br \/>\n  ;(grdraw p2 p3 1)<br \/>\n  ;(grdraw p3 p1 1)<br \/>\n  (setq P1 (trans p1 1 0))<br \/>\n  (setq P2 (trans p2 1 0))<br \/>\n  ;(setq P3 (trans p3 1 0))<br \/>\n  (initget 1)<br \/>\n  (setq an (getangle &#8220;n\u65cb\u8f6c\u89d2\u5ea6:&#8221;))<br \/>\n  (initget 7)<br \/>\n  (setq sc (getreal &#8220;n\u7f29\u653e\u500d\u6570:&#8221;)) <\/p>\n<p>  (setq p0 &#8216;(2.3 1.3 -1.2))<br \/>\n;;;  (setq s<br \/>\n;;;  (Misc:test 10000<br \/>\n;;;    &#8216;(<br \/>\n;;;      (MAT:Reflect p1 p2)<br \/>\n;;;    )<br \/>\n;;;  ))<\/p>\n<p>  (setq mat (MAT:RotateBy2P P1 P2 an))<br \/>\n  (setq mat (vlax-tmatrix mat))<br \/>\n  (setq i -1)<br \/>\n  (command &#8220;undo&#8221; &#8220;be&#8221;)<br \/>\n  (if (setq ss (ssget))<br \/>\n    (repeat (sslength ss)<br \/>\n      (setq ent (ssname ss (setq i (1+ i))))<br \/>\n      (setq obj (vlax-ename-&gt;vla-object ent))<br \/>\n      (setq obj (vla-copy obj))<br \/>\n      (vla-transformby obj mat)<br \/>\n    )<br \/>\n  )<br \/>\n  (command &#8220;undo&#8221; &#8220;e&#8221;)<br \/>\n  (princ)<br \/>\n)<\/p>\n<p>;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;\u955c\u50cf\uff0c\u65cb\u8f6c\u548c\u7f29\u653e\u7684\u53d8\u6362\u77e9\u9635\u7684\u6d4b\u8bd5                           ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n;;;\u4ee5\u4e0b\u4f8b\u5b50\u6f14\u793a\uff1a                                             ;;<br \/>\n;;;\u628a\u9009\u62e9\u96c6\u7684\u6240\u6709\u7269\u4f53\uff0c\u4ece\u6307\u5b9a\u7684\u57fa\u70b9\u79fb\u52a8\u5230\u76ee\u6807\u70b9\uff0c\u5e76\u6839\u636e\u76ee\u6807\u70b9 ;;<br \/>\n;;;\u65cb\u8f6c45\u5ea6\uff0c\u7136\u540e\u518d\u4ee5\u76ee\u6807\u70b9\u653e\u59272\u500d.\u56fa\u7136\uff0c\u8fd9\u4e2a\u7a0b\u5e8f\u5b8c\u5168\u53ef\u4ee5\u7528\u547d ;;<br \/>\n;;;\u4ee4\u65b9\u5f0f\u6216\u8005vla\u65b9\u5f0f\u6765\u5b8c\u6210\u3002\u6b64\u5904\u4ec5\u4ec5\u8bf4\u660e\u5982\u4f55\u8fd0\u7528\u77e9\u9635\u3002        ;;<br \/>\n;;;\u6ce8\u610f\uff1aCAD\u7684\u77e9\u9635\u548cOpenGL\u6216\u5176\u4ed6\u7684\u8bed\u8a00\u7684\u77e9\u9635\u6709\u533a\u522b:           ;;<br \/>\n;;;      1.\u5b83\u4eec\u7684\u77e9\u9635\u662f\u4e92\u4e3a\u8f6c\u7f6e\u7684\u3002                           ;;<br \/>\n;;;      2.\u5b83\u4eec\u7684\u77e9\u9635\u76f8\u4e58\u4e5f\u662f\u987a\u5e8f\u76f8\u53cd\u7684\u3002                     ;;<br \/>\n;;;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;;;<br \/>\n(defun c:test (\/ ss p1 p2 mat1 mat2 mat3 i e o)<br \/>\n  (if (setq ss (ssget))                                         ;\u9009\u62e9\u7269\u4f53<br \/>\n    (progn<br \/>\n      (initget 1)<br \/>\n      (setq P1 (getpoint &#8220;n\u57fa\u70b9:&#8221;))                            ;\u6307\u5b9a\u57fa\u70b9<br \/>\n      (initget 1)<br \/>\n      (setq P2 (getpoint P1 &#8220;n\u76ee\u6807\u70b9:&#8221;))                       ;\u6307\u5b9a\u76ee\u6807\u70b9<br \/>\n      (grvecs (list 1 p1 p2))                                   ;\u7ea2\u7ebf\u6807\u8bc6\u4f4d\u79fb<br \/>\n      (setq p1 (trans p1 1 0))                                  ;\u628a\u8f93\u5165\u5f97\u5230\u7684\u70b9\u8f6c\u5316\u4e3a\u4e16\u754c\u5750\u6807\u7cfb\u7684\u70b9<br \/>\n      (setq p2 (trans p2 1 0))                                  ;\u628a\u8f93\u5165\u5f97\u5230\u7684\u70b9\u8f6c\u5316\u4e3a\u4e16\u754c\u5750\u6807\u7cfb\u7684\u70b9<\/p>\n<p>      (setq mat1 (MAT:TRANSLATEBY2P P1 p2))                     ;\u4eceP1\u4f4d\u79fb\u5230P2\u7684\u4f4d\u79fb\u77e9\u9635<br \/>\n      (setq mat2 (MAT:ROTATION p2 (* pi 0.25)))                 ;\u4ee5P2\u4e3a\u57fa\u70b9\u65cb\u8f6c45\u5ea6\u7684\u53d8\u6362\u77e9\u9635<br \/>\n      (setq mat3 (MAT:SCALING p2 2.0))                          ;\u4ee5P2\u4e3a\u57fa\u70b9\u653e\u59272\u500d\u53d8\u6362\u77e9\u9635<br \/>\n      (setq mat  (MAT:mxm mat3 (MAT:mxm mat2 mat1)))            ;\u987b\u6309\u7167\u5148\u540e\u987a\u5e8f\u4ece\u91cc\u5230\u5916\u8fd9\u6837\u76f8\u4e58<br \/>\n      (setq mat  (vlax-tmatrix mat))                            ;\u7528vlax-tmatrix\u628a\u53d8\u6362\u77e9\u9635\u4ece\u8868\u8f6c\u5316\u4e3aActiveX\u6570\u7ec4\u8868\u8fbe\u7684\u77e9\u9635<br \/>\n      (command &#8220;undo&#8221; &#8220;be&#8221;)<br \/>\n      (setq i 0)<br \/>\n      (repeat (sslength ss)<br \/>\n        (setq e (ssname ss i))                                  ;\u83b7\u5f97\u56fe\u5143\u540d<br \/>\n        (setq o (vlax-ename-&gt;vla-object e))                     ;\u83b7\u5f97ActiveX\u5bf9\u8c61<br \/>\n        (vla-transformby o mat)                                 ;\u7528vla-transformby\u51fd\u6570\u5bf9\u4e4b\u53d8\u6362<br \/>\n        (setq i (1+ i))<br \/>\n      )<br \/>\n      (command &#8220;undo&#8221; &#8220;e&#8221;)<br \/>\n    )<br \/>\n  )<br \/>\n  (princ)<br \/>\n)<br \/>\n;;;http:\/\/bbs.mjtd.com\/forum.php?mod=viewthread&amp;tid=91331<br \/>\n;;|;<br \/>\n(protect-assign MatLibSymbols)<br \/>\n(princ)<br \/>\n[\/codesyntax]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5bf9CAD\u4e2d\u77e9\u9635\u53ca\u5176\u76f8\u5173\u77e5\u8bc6\u7684\u7814\u7a76. \u5305\u62ec\u4e86\u7ebf\u6027\u4ee3\u6570\u7684\u4e00\u4e9b\u57fa\u672c\u77e5\u8bc6\uff1b \u77e9\u9635\u7684\u57fa\u672c\u8fd0\u7b97\uff1b \u77e9\u9635\u7684\u57fa\u672c\u53d8\u6362\uff1b \u5b9e\u4f53\u7684<\/p>\n<p class=\"more-link\"><a href=\"https:\/\/www.highflybird.com\/blog\/?p=1296\" 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":[34],"class_list":["post-1296","post","type-post","status-publish","format-standard","hentry","category-programming","tag-34"],"_links":{"self":[{"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1296","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=1296"}],"version-history":[{"count":0,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1296\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1296"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1296"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.highflybird.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}