找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 936|回复: 2

[LISP函数-向量]:向量运算(乘常量/加/减)

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-8-31 19:00:27 | 显示全部楼层 |阅读模式

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

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

×

  1. ;; ! ****************************************************************************
  2. ;; ! GE_VecScale
  3. ;; ! ****************************************************************************
  4. ;; ! Function : Scale a vector by a scalar amount
  5. ;; !
  6. ;; ! Arguments: 'v'   - Vector to be scaled
  7. ;; !            'scl' - Scalar amount to be scaled
  8. ;; !
  9. ;; ! Returns  : 'v' - The scaled vector
  10. ;; !
  11. ;; ! (C) 1999-2004, Four Dimension Technologies, Bangalore
  12. ;; ! e-mail   : [email]rakesh.rao@4d-technologies.com[/email]
  13. ;; ! Web      : [url]www.4d-technologies.com[/url]
  14. ;; ! ****************************************************************************
  15. ;; 矢量放缩
  16. (defun GE_VecScale (v scl)
  17.   (mapcar '(lambda (x) (* x scl)) v)
  18. )

  19. ;|
  20.    向量乘常量
  21. |;
  22. (defun $XDLSP_Vector_Scaling (vec const)
  23.   (mapcar
  24.     '(lambda (x)
  25.        (* x const)
  26.      )
  27.     vec
  28.   )
  29. )
  30. ;|
  31.    向量相加
  32. |;
  33. (defun $XDLSP_Vector_Union (vec1 vec2)
  34.   (mapcar '+ vec1 vec2)
  35. )
  36. ;|
  37.    向量相减
  38. |;
  39. (defun $XDLSP_Vector_Subtract (vec1 vec2)
  40.   (mapcar '- vec1 vec2)
  41. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

发表于 2005-9-1 23:12:36 | 显示全部楼层
VecScale其实是一个挺不实用的函数:因为cad的scale要基点的.

组合一下:

  1. (defun VecScale-base(v Pbase scl)
  2. ($XDLSP_Vector_Union
  3.    (GE_VecScale  ($XDLSP_Vector_Subtract v Pbase)sca)
  4.    Pbase
  5. )
  6. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2005-9-4 23:45:15 | 显示全部楼层

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;;  Geometry Utilities                                                ;
  3. ;;;--------------------------------------------------------------------;
  4. ;;;       Function:  向量相加                                          ;
  5. ;;;                                                                    ;
  6. ;;;    Description:  This function returns the addition of             ;
  7. ;;;                  two vectors.                                      ;
  8. ;;;                                                                    ;
  9. ;;;      Arguments:                                                    ;
  10. ;;;               v1   =  a valid vector list such as:                 ;
  11. ;;;                       '( 5 5 5 )                                   ;
  12. ;;;               v2   =  a valid vector list such as:                 ;
  13. ;;;                       '( 2 2 2 )                                   ;
  14. ;;;                                                                    ;
  15. ;;; Returned Value:  A vector list with the subtraction performed      ;
  16. ;;;                  from v1 and v2.                                   ;
  17. ;;;                        (add-vector '(5 5 5 ) '(2 2 2))                ;
  18. ;;;                                         Returns:                       ;
  19. ;;;                                        (7 7 7)                        ;
  20. ;;;                                                                       ;
  21. ;;;          Usage: (add-vector '(5 5 5 ) '(2 2 2 ))                   ;
  22. ;;;--------------------------------------------------------------------;
  23. (defun add-vector (v1 v2)
  24.   (if (eq (type v1) 'VARIANT)
  25.     (if        (> (vlax-variant-type v1) 8192)
  26.       (setq v1 (vlax-safearray->list (vlax-variant-value v1)))
  27.     )
  28.   )
  29.   (if (eq (type v2) 'VARIANT)
  30.     (if        (> (vlax-variant-type v2) 8192)
  31.       (setq v2 (vlax-safearray->list (vlax-variant-value v2)))
  32.     )
  33.   )
  34.   (mapcar '+ v1 v2)
  35. )

  36. ;;;--------------------------------------------------------------------;
  37. ;;;       Function:  向量相减                                          ;
  38. ;;;                                                                    ;
  39. ;;;    Description:  This function returns the subtraction of two      ;
  40. ;;;                  vectors.                                          ;
  41. ;;;                                                                    ;
  42. ;;;      Arguments:                                                    ;
  43. ;;;               v1   =  a valid vector list such as:                 ;
  44. ;;;                       '( 5 5 5 )                                   ;
  45. ;;;               v2   =  a valid vector list such as:                 ;
  46. ;;;                       '( 1 1 1 )                                   ;
  47. ;;;                                                                    ;
  48. ;;; Returned Value:  A vector list with the subtraction performed      ;
  49. ;;;                  from v1 and v2.                                   ;
  50. ;;;                        (subtract-vector '(5 5 5 ) '(1 1 1))           ;
  51. ;;;                                         Returns:                       ;
  52. ;;;                                        (4 4 4)                        ;
  53. ;;;                                                                       ;
  54. ;;;          Usage: (subtract-vector '(5 5 5 ) '(1 1 1))               ;
  55. ;;;--------------------------------------------------------------------;
  56. (defun subtract-vector (v1 v2)
  57.   (vlax-3d-point (mapcar '- v1 v2))
  58. )

  59. ;;;--------------------------------------------------------------------;
  60. ;;;       Function:  向量乘以一个系数                                  ;
  61. ;;;                                                                    ;
  62. ;;;    Description:  This function returns the multiplication of       ;
  63. ;;;                  a vector to a number.                             ;
  64. ;;;                                                                    ;
  65. ;;;                  Required Functions:                               ;
  66. ;;;                      mult-by-scalar                                ;
  67. ;;;                                                                    ;
  68. ;;;      Arguments:                                                    ;
  69. ;;;               vect =  a valid vector list such as:                 ;
  70. ;;;                       '( 5 5 5 )                                   ;
  71. ;;;             scalar = a valid number                                ;
  72. ;;;                                                                    ;
  73. ;;; Returned Value:  A vector list with the multiplication of the      ;
  74. ;;;                  scalar argument with the supplied vector list.    ;
  75. ;;;                        (mult-by-scalar '(5 5 5 ) 12)                  ;
  76. ;;;                                         Returns:                       ;
  77. ;;;                                        (60 60 60)                     ;
  78. ;;;                                                                       ;
  79. ;;;          Usage: (mult-by-scalar '(5 5 5 ) 12)                      ;
  80. ;;;--------------------------------------------------------------------;
  81. (defun mult-by-scalar (vect scalar / sv TransDataA TransData)
  82.   (if (> (vlax-variant-type vect) 8192)
  83.     (setq vect (vlax-safearray->list (vlax-variant-value vect)))
  84.   )
  85.   (setq        sv (if (null vect)
  86.              nil
  87.              (cons (* scalar (car vect))
  88.                    (mult-by-scalar (cdr vect) scalar)
  89.              )
  90.            )
  91.   )
  92.   ;; Convert to a Variant Array of Doubles here ->
  93.   (setq TransDataA (vlax-make-safearray vlax-vbDouble (cons 0 3)))
  94.   (vlax-safearray-fill TransDataA sv)
  95.   (setq        TransData (vlax-make-variant
  96.                     TransDataA
  97.                     (logior vlax-vbarray vlax-vbDouble)
  98.                   )
  99.   )
  100. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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