找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1142|回复: 2

[LISP函数-矩阵]:构造一个平移矩阵

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-9-4 23:49:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  1. ;;构造一个平移矩阵
  2. ;;;--------------------------------------------------------------------;
  3. ;;;       Function:  MAKE-TRANSLATION-MATRIX                           ;
  4. ;;;                                                                    ;
  5. ;;;    Description:  This function converts a variant vector list      ;
  6. ;;;                  (a list of three numbers) into a vector matrix.   ;
  7. ;;;                                                                    ;
  8. ;;;                  Required Functions:                               ;
  9. ;;;                                                                    ;
  10. ;;;                                                                    ;
  11. ;;;                  Example:  A vector list '( 5 5 5 ) is passed to   ;
  12. ;;;                  make-translation-matrix. The function then        ;
  13. ;;;                  translates this value to a matrix list.           ;
  14. ;;;                  using the following logic.                        ;
  15. ;;;                                                                    ;
  16. ;;;                        make a translation matrix from                 ;
  17. ;;;                        1,2 or 3 dim vector v represented as:          ;
  18. ;;;                                 list (x), (x y) or (x y z)             ;
  19. ;;;                                                                    ;
  20. ;;;                                                                    ;
  21. ;;;      Arguments:                                                    ;
  22. ;;;             vector =  a valid vector list such as:                 ;
  23. ;;;                       '( 5 5 5) or '( 1.2 4.5 200.00)              ;
  24. ;;;      or vector =  a valid safearray variant vector list of doubles ;
  25. ;;;                                                                    ;
  26. ;;; Returned Value:  A matrix List such as:                            ;
  27. ;;;                      (make-translation-matrix '( 5 5 5 ))             ;
  28. ;;;                                                                       ;
  29. ;;;                            Returns List In A Variant Array:           ;
  30. ;;;                                ((1.0 0.0 0.0 5.0)                     ;
  31. ;;;                                  (0.0 1.0 0.0 5.0)                    ;
  32. ;;;                                  (0.0 0.0 1.0 5.0)                    ;
  33. ;;;                                  (0.0 0.0 0.0 1.0)                    ;
  34. ;;;                                )                                      ;
  35. ;;;                                                                       ;
  36. ;;;       Usage: (make-translation-matrix '( 5 5 5 ))   or             ;
  37. ;;;              (make-translation-matrix (vlax-3d-point '( 5 5 5 )))  ;
  38. ;;;                                                                    ;
  39. ;;;--------------------------------------------------------------------;
  40. (defun make-translation-matrix (vector)
  41.   (if (> (vlax-variant-type vector) 8192)
  42.     (setq vector (vlax-safearray->list (vlax-variant-value vector)))
  43.   )
  44.   (setq        tm (vlax-tmatrix
  45.              (list (list 1 0 0 (car vector))
  46.                    (list 0 1 0 (check-vector-elem (cadr vector)))
  47.                    (list 0 0 1 (check-vector-elem (caddr vector)))
  48.                    '(0 0 0 1)
  49.              )
  50.            )
  51.   )
  52.   ;; Convert to a Variant Array of Doubles here ->
  53.   (setq        TransDataA
  54.          (vlax-make-safearray vlax-vbDouble (cons 0 3) (cons 0 3))
  55.   )
  56.   (vlax-safearray-fill TransDataA tm)
  57.   (setq        TransData (vlax-make-variant
  58.                     TransDataA
  59.                     (logior vlax-vbarray vlax-vbDouble)
  60.                   )
  61.   )

  62. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8613个

财富等级: 富甲天下

发表于 2005-9-5 11:24:33 | 显示全部楼层
check-vector-elem 未定义
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2005-9-5 12:22:06 | 显示全部楼层

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;;  Matrix Operations                                                 ;
  3. ;;;--------------------------------------------------------------------;
  4. ;;;       Function:  CHECK-VECTOR-ELEM                                 ;
  5. ;;;                                                                    ;
  6. ;;;    Description:  This function check the integrity of the elem     ;
  7. ;;;                  argument. This guarantees a number value for      ;
  8. ;;;                  functions that require this check.                ;
  9. ;;;                                                                    ;
  10. ;;;                  Required Functions:                               ;
  11. ;;;                      check-vector-elem                             ;
  12. ;;;                                                                    ;
  13. ;;;      Arguments:                                                    ;
  14. ;;;               elem =  a valid number or nil                        ;
  15. ;;;                                                                    ;
  16. ;;; Returned Value:  A number. If the argument elem is nil.            ;
  17. ;;;                  check-vector returns 0 otherwise it returns the   ;
  18. ;;;                  argument.                                         ;
  19. ;;;                                                                       ;
  20. ;;;          Usage: (check-vector-elem 0)                              ;
  21. ;;;--------------------------------------------------------------------;
  22. (defun check-vector-elem (elem)
  23.   (if (null elem)
  24.     0
  25.     elem
  26.   )
  27. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 06:29 , Processed in 0.384187 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表