矩阵求逆的网页没有帐号打不开,又无法注册。能否把代码贴出来。
这里是那几个链接的代码。
RE: 【越飞越高讲堂15】用LISP论矩阵
highflybir 发表于 2013-1-9 12:49 static/image/common/back.gif这里是那几个链接的代码。
谢谢了,高兄! 纯支持一下吧,要想玩这个还得补一下线性代数的知识,忘光光了! 必须下载学习........... 本帖最后由 highflybir 于 2013-1-11 00:29 编辑
再来举一个例子:
3D 的环形阵列。
选择物体,然后对物体集进行3d环形阵列。
很类似命令:3darray.
经过测试,比3darray快了很多,而且不出错。
;;;3d环形阵列测试
(defun c:PAT(/ ss N P1 P2 ActDoc ObjLst) ;c:PolarArrayTest
(setq ss (ssget))
(initget 7)
(setq N (getInt "\n数量:"))
(initget 9)
(setq P1 (getpoint "\n中心点:"))
(initget 9)
(setq p2 (getpoint P1 "\n另一点:"))
(if ss
(progn
(setq ActDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-StartUndoMark ActDoc)
(setq Ojblst (Ent:Ents->Objs ss))
(Mat:3dPolarArray ojblst N (+ pi pi) T (trans p1 1 0) (trans p2 1 0))
(vla-EndUndoMark ActDoc)
(vlax-release-object ActDoc)
(princ)
)
)
)
;;;-----------------------------------------------------------;;
;;; 三维环形阵列 ;;
;;; 输入:Objlst -- 物体集 ;;
;;; Number -- 要阵列的个数(包含自身在内) ;;
;;; FillAngle -- 旋转角度 ;;
;;; IsCCW -- 是否逆时针 ;;
;;; P1 -- 阵列中心点 ;;
;;; P2 -- 阵列轴线的另一点 ;;
;;; 输出:阵列的物体列表 ;;
;;;-----------------------------------------------------------;;
(defun Mat:3dPolarArray (Objlst Number FillAngle IsCCW P1 P2 / lst1 lst2 ANG MAT NEW)
(if IsCCW
(setq FillAngle (float FillAngle))
(setq FillAngle (- FillAngle (+ pi pi)))
)
(setq ang (/ FillAngle (1- Number)))
(setq mat (MAT:RotateBy2P P1 P2 ang))
(setq mat (vlax-tmatrix mat))
(repeat (1- Number)
(setq lst1 nil)
(foreach obj ObjLst
(setq new (vla-copy obj))
(vla-transformby new mat)
(setq lst1 (cons new lst1))
)
(setq objLst (reverse lst1))
(setq lst2 (cons objLst lst2))
)
(reverse lst2)
)
;;;-----------------------------------------------------------;;
;;;获取物体Objects ;;
;;;-----------------------------------------------------------;;
(defun Ent:Ents->Objs (sel / i e o l)
(setq i (sslength sel))
(repeat i
(setq e (ssname sel (setq i (1- i))))
(setq o (vlax-ename->vla-object e))
(setq l (cons o l))
)
)