找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 696|回复: 2

[LISP函数-向量]:向量的单位向量

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

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

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

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

×

  1. ;; ! ****************************************************************************
  2. ;; ! GE_VecNormalize
  3. ;; ! ****************************************************************************
  4. ;; ! Function : Normalize a vector (scale to a unit length)
  5. ;; !
  6. ;; ! Arguments: 'v' - Vector to be normalized
  7. ;; !
  8. ;; ! Returns  : 'v' - The normalized vector
  9. ;; !
  10. ;; ! Comments:  Normalizing results in the vector being reduced to a unit length
  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_VecNormalize (v)
  17.   (GE_VecScale v (/ 1.0 (distance v (list 0.0 0.0 0.0))))
  18. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

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


  1. ;;;--------------------------------------------------------------------;
  2. ;;;       Function:  求向量的单位向量                                  ;
  3. ;;;                                                                    ;
  4. ;;;    Description:  This function returns the normal for the          ;
  5. ;;;                  vector supplied.                                  ;
  6. ;;;                                                                    ;
  7. ;;;                  Required Functions:                               ;
  8. ;;;                      mult-by-scalar                                ;
  9. ;;;                                                                    ;
  10. ;;;      Arguments:                                                    ;
  11. ;;;               vect =  a valid vector list such as:                 ;
  12. ;;;                       '( 5 5 5 )                                   ;
  13. ;;;                                                                    ;
  14. ;;; Returned Value:  If the vector supplied is not '(0 0 0 )           ;
  15. ;;;                  A one unit vector is returned. Otherwise nil      ;
  16. ;;;                  is returned.                                      ;
  17. ;;;                                                                    ;
  18. ;;;                        (unit-vector  '( 5 5 5))                       ;
  19. ;;;                                Returns:                               ;
  20. ;;;                                 (0.57735 0.57735 0.57735)             ;
  21. ;;;                                                                       ;
  22. ;;;          Usage: (unit-vector  '( 5 5 5))                           ;
  23. ;;;--------------------------------------------------------------------;
  24. (defun unit-vector (vect / uv TransDataA TransData)
  25.   (if (> (vlax-variant-type vect) 8192)
  26.     (setq vect (vlax-safearray->list (vlax-variant-value vect)))
  27.   )
  28. ;;; test for (0 0 0 )
  29.   (setq
  30.     uv (if (not (vl-every (function (lambda (x) (zerop x))) vect))
  31.          (mult-by-scalar vect (/ 1.0 (vector-norm vect)))
  32.          nil
  33.        )
  34.   )
  35.   ;; Convert to a Variant Array of Doubles here ->
  36.   (if uv
  37.     (progn
  38.       (setq TransDataA (vlax-make-safearray vlax-vbDouble (cons 0 3)))
  39.       (vlax-safearray-fill TransDataA uv)
  40.       (setq TransData (vlax-make-variant
  41.                         TransDataA
  42.                         (logior vlax-vbarray vlax-vbDouble)
  43.                       )
  44.       )
  45.     )
  46.   )
  47. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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